#lang scheme/base
(require (planet bzlib/base)
net/base64
"port.ss"
"filter.ss"
(rename-in net/base64 (base64-decode-stream input-base64-filter))
)
(define (output-base64-filter in out)
(base64-encode-stream in out #"\n"))
(define (open-input-base64-port in)
(make-input-filter-port in input-base64-filter #f))
(define call-with-input-base64-port
(make-call-with-input-port open-input-base64-port in))
(define (open-input-base64-file path)
(open-input-base64-port (open-input-file path)))
(define call-with-input-base64-file
(make-call-with-input-port open-input-base64-file path))
(define (open-output-base64-port out)
(make-output-filter-port out output-base64-filter #f))
(define call-with-output-base64-port
(make-call-with-output-port open-output-base64-port out))
(define (open-output-base64-file path #:exists (exists 'replace))
(open-input-base64-port (open-output-file path #:exists exists)))
(define call-with-output-base64-file
(make-call-with-output-port open-output-base64-file path #:exists (exists 'replace)))
(provide/contract
(open-input-base64-port (-> input-port? input-port?))
(call-with-input-base64-port (-> input-port? (-> input-port? any) any))
(open-input-base64-file (-> path-string? input-port?))
(call-with-input-base64-file (-> path-string? (-> input-port? any) any))
(open-output-base64-port (-> output-port? output-port?))
(call-with-output-base64-port (-> output-port? (-> output-port? any) any))
(open-output-base64-file (->* (path-string?)
(#:exists (or/c 'replace 'error))
output-port?))
(call-with-output-base64-file (->* (path-string? (-> output-port? any))
(#:exists (or/c 'replace 'error))
any))
(output-base64-filter port-filter/c)
)
(provide input-base64-filter)