diff options
author | Ludovic Courtès <ludo@gnu.org> | 2020-05-18 23:21:36 +0200 |
---|---|---|
committer | Ludovic Courtès <ludo@gnu.org> | 2020-05-22 00:35:24 +0200 |
commit | 56f7ca6e7c8b5eadeee48b00bcbd78f9fa9e5f43 (patch) | |
tree | e7b069dfcd83f9a65aa710e247465bf7ad25ee7b | |
parent | 0e4e9c8e7655f3e2a9c2615923768d211ac02a3e (diff) | |
download | gnu-guix-56f7ca6e7c8b5eadeee48b00bcbd78f9fa9e5f43.tar gnu-guix-56f7ca6e7c8b5eadeee48b00bcbd78f9fa9e5f43.tar.gz |
packages: Add 'base64' macro.
* guix/packages.scm (define-compile-time-decoder): New macro.
(base32): Redefine in terms of it.
(base64): New macro.
-rw-r--r-- | guix/packages.scm | 31 |
1 files changed, 19 insertions, 12 deletions
diff --git a/guix/packages.scm b/guix/packages.scm index 3fff50a6e8..c1c4805ae9 100644 --- a/guix/packages.scm +++ b/guix/packages.scm @@ -28,6 +28,7 @@ #:use-module (guix monads) #:use-module (guix gexp) #:use-module (guix base32) + #:autoload (guix base64) (base64-decode) #:use-module (guix grafts) #:use-module (guix derivations) #:use-module (guix memoization) @@ -62,6 +63,7 @@ origin-snippet origin-modules base32 + base64 package package? @@ -197,19 +199,24 @@ (set-record-type-printer! <origin> print-origin) -(define-syntax base32 - (lambda (s) - "Return the bytevector corresponding to the given Nix-base32 +(define-syntax-rule (define-compile-time-decoder name string->bytevector) + "Define NAME as a macro that runs STRING->BYTEVECTOR at macro expansion time +if possible." + (define-syntax name + (lambda (s) + "Return the bytevector corresponding to the given textual representation." - (syntax-case s () - ((_ str) - (string? (syntax->datum #'str)) - ;; A literal string: do the conversion at expansion time. - (with-syntax ((bv (nix-base32-string->bytevector - (syntax->datum #'str)))) - #''bv)) - ((_ str) - #'(nix-base32-string->bytevector str))))) + (syntax-case s () + ((_ str) + (string? (syntax->datum #'str)) + ;; A literal string: do the conversion at expansion time. + (with-syntax ((bv (string->bytevector (syntax->datum #'str)))) + #''bv)) + ((_ str) + #'(string->bytevector str)))))) + +(define-compile-time-decoder base32 nix-base32-string->bytevector) +(define-compile-time-decoder base64 base64-decode) (define (origin-actual-file-name origin) "Return the file name of ORIGIN, either its 'file-name' field or the file |