aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHugo Hörnquist <hugo@lysator.liu.se>2020-06-28 23:27:47 +0200
committerHugo Hörnquist <hugo@lysator.liu.se>2020-06-29 01:08:54 +0200
commit88aab05e8de72ac07dc7639f9254cf8e727176ae (patch)
tree14b7599d61c31f4b7f3c629e931f52c82dc10875
parentAdd parse-iso-datetime. (diff)
downloadcalp-88aab05e8de72ac07dc7639f9254cf8e727176ae.tar.gz
calp-88aab05e8de72ac07dc7639f9254cf8e727176ae.tar.xz
Add base64 utility functions.
-rw-r--r--module/output/types.scm6
-rw-r--r--module/util/base64.scm12
-rw-r--r--module/vcomponent/parse/types.scm5
3 files changed, 16 insertions, 7 deletions
diff --git a/module/output/types.scm b/module/output/types.scm
index 08ac878a..22f3ca5b 100644
--- a/module/output/types.scm
+++ b/module/output/types.scm
@@ -4,13 +4,11 @@
:use-module (util exceptions)
:use-module (util base64)
:use-module (datetime)
- :use-module (datetime util)
- :use-module (rnrs io ports))
+ :use-module (datetime util))
(define (write-binary _ value)
- (bytevector->string (bytevector->base64 value)
- (make-transcoder (latin-1-codec))))
+ (bytevector->base64-string value))
(define (write-boolean _ value)
(if value "TRUE" "FALSE"))
diff --git a/module/util/base64.scm b/module/util/base64.scm
index 2a49ba1e..148055c9 100644
--- a/module/util/base64.scm
+++ b/module/util/base64.scm
@@ -132,11 +132,23 @@
ret))
+;; string -> bv
+(define-public (base64-string->bytevector string)
+ (base64->bytevector
+ (string->bytevector string (make-transcoder (latin-1-codec)))))
+
+;; bv -> string
+(define-public (bytevector->base64-string bv)
+ (bytevector->string (bytevector->base64 bv)
+ (make-transcoder (latin-1-codec))))
+
+;; string -> string
(define*-public (base64encode string optional: (transcoder (native-transcoder)))
(bytevector->string
(bytevector->base64 (string->bytevector string transcoder))
(make-transcoder (latin-1-codec))))
+;; string -> string
(define*-public (base64decode string optional: (transcoder (native-transcoder)))
(bytevector->string
(base64->bytevector
diff --git a/module/vcomponent/parse/types.scm b/module/vcomponent/parse/types.scm
index e9c5e811..552aa191 100644
--- a/module/vcomponent/parse/types.scm
+++ b/module/vcomponent/parse/types.scm
@@ -2,7 +2,6 @@
:use-module (util)
:use-module (util exceptions)
:use-module (util base64)
- :use-module (rnrs io ports)
:use-module (datetime)
:use-module (srfi srfi-9 gnu)
)
@@ -13,8 +12,8 @@
(unless (string=? "BASE64" (hashq-ref props 'ENCODING))
(warning "Binary field not marked ENCODING=BASE64"))
- (base64->bytevector
- (string->bytevector value (make-transcoder (latin-1-codec)))))
+ ;; TODO whitespace in binary?
+ (base64-string->bytevector value))
;; BOOLEAN
(define (parse-boolean props value)