(define-interface banana-interface (export (banana-error? (proc (:value) :boolean)) (unknown-byte-error? (proc (:value) :boolean)) (unknown-byte-error-byte (proc (:value) :exact-integer)) (unknown-byte-error-profile (proc (:value) :value)) (unsupported-type-error? (proc (:value) :boolean)) (unsupported-type-error-type (proc (:value) :string)) (unsupported-type-error-value (proc (:value) :value)) :profile (make-profile (proc (:string (proc (:value) :value) :pair) :value)) (extend-profile (proc (:value :string (proc (:value) :value) :pair) :value)) (profile? (proc (:value) :boolean)) (profile-name (proc (:value) :string)) (profile-encoder (proc (:value) (proc (:value) :value))) (profile-decoder-table (proc (:value) :value)) (profile-parent (proc (:value) :value)) profile/none ;; Do these next two really need to stay here? (etb? (proc (:exact-integer) :boolean)) (read-element! (proc (:input-port :value) :value)) (decode (proc (:value &opt :value) :value)) (encode (proc (:value &opt :value) :value)))) (define-interface banana-extras-interface (export ;; These can be used for other profiles as lengths and such. (posint->byte-vector (proc (:exact-integer) :value)) (byte-vector->posint (proc (:value) :exact-integer)) ;; Generally just for debugging or manual testing. (prettify-byte (proc (:exact-integer) :string)) (prettify-byte-vector (proc (:value) :string)))) (define-structures ((banana banana-interface) (banana-extras banana-extras-interface)) (open scheme define-record-types conditions exceptions signals handle bitwise byte-vectors ascii srfi-1 srfi-6) (files banana))