content-transfer-encoding.ss
#lang scheme/base
;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; MIME.plt
;;
;; an extensible MIME framework.
;;
;; Bonzai Lab, LLC.  All rights reserved.
;;
;; Licensed under LGPL.
;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; content-transfer-encoding.ss - read/write the content-trasnfer-encoding headers.
;; yc 2/18/2010 - first version.
(require "depend.ss" 
         "base.ss"
         )

(define (content-transfer-encoding? v)
  (case v 
    ((7bit 8bit binary base64 quoted-printable) v)
    (else #f)))

(define p:transfer (choice (tokens/comment-ci #"7bit" (return '7bit))
                           (tokens/comment-ci #"8bit" (return '8bit))
                           (tokens/comment-ci #"binary" (return 'binary))
                           (tokens/comment-ci #"base64" (return 'base64))
                           (tokens/comment-ci #"quoted-printable" 
                                              (return 'quoted-printable))))

(define read-content-transfer-encoding (make-reader p:transfer))

(mime-header-reader-set! "Content-Transfer-Encoding" read-content-transfer-encoding)

(define write-content-transfer-encoding (curry format "~a")) 

;; OUTPUT
(define content-transfer-encoding (make-parameter 'binary))

(define mime-include-content-transfer-encoding? (make-parameter #t))

(provide/contract 
 (read-content-transfer-encoding Reader/c)
 (write-content-transfer-encoding (-> content-transfer-encoding? string?))
 (content-transfer-encoding? (-> any/c any))
 (content-transfer-encoding (parameter/c content-transfer-encoding?))
 (mime-include-content-transfer-encoding? (parameter/c boolean?))
 )