;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2022 pukkamustard ;;; ;;; This file is part of GNU Guix. ;;; ;;; GNU Guix is free software; you can redistribute it and/or modify it ;;; under the terms of the GNU General Public License as published by ;;; the Free Software Foundation; either version 3 of the License, or (at ;;; your option) any later version. ;;; ;;; GNU Guix is distributed in the hope that it will be useful, but ;;; WITHOUT ANY WARRANTY; without even the implied warranty of ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;;; GNU General Public License for more details. ;;; ;;; You should have received a copy of the GNU General Public License ;;; along with GNU Guix. If not, see . (define-module (guix eris http) #:use-module (eris utils base32) #:use-module (web uri) #:use-module (srfi srfi-2) #:export (make-blake2b-urn-query-ref)) (define blake2b-uri-path-regexp (make-regexp "^blake2b:" regexp/icase)) (define (make-blake2b-urn-query-ref block-ref) (lambda (query) (and-let* ((_ query) ; ensure query is not false (urn (string->uri query)) (_ (uri? urn)) (_ (eqv? (uri-scheme urn) 'urn)) (_ (regexp-exec blake2b-uri-path-regexp (uri-path urn))) (blake2b-ref (base32-decode (string-drop (uri-path urn) 8)))) (block-ref blake2b-ref))))