module Encode:sig
..end
type 'a
output = {
|
unit : |
|
bool : |
|
float : |
|
char : |
|
int : |
|
nativeint : |
|
int32 : |
|
int64 : |
|
string : |
|
list : |
|
option : |
|
record : |
|
tuple : |
|
sum : |
val string_target : string output
Print values. Caution, inefficient! Should be used for debugging only
type 'src
encoder = {
|
emit : |
A way to encode values of type 'src
into any serialization format
val unit : unit encoder
val bool : bool encoder
val float : float encoder
val char : char encoder
val int : int encoder
val nativeint : nativeint encoder
val int32 : int32 encoder
val int64 : int64 encoder
val string : string encoder
val list : 'a encoder -> 'a list encoder
val option : 'a encoder -> 'a option encoder
val map : ('a -> 'b) -> 'b encoder -> 'a encoder
val array : 'a encoder -> 'a array encoder
val sequence : 'a encoder -> 'a CConv.sequence encoder
val apply : 'into output -> 'src encoder -> 'src -> 'into
Helper to apply an encoder to a value
type 'r
record_encoder = {
|
record_emit : |
val record : 'r record_encoder -> 'r encoder
Encode a record, using the polymorphic record CConv.Encode.record_encoder
to
generate an association list
val record_fix : ('r encoder -> 'r record_encoder) ->
'r encoder
Fixpoint on record definition
Example:
type point = {x:int; y:int; c:string};;
let enc_point = record
{record_emit=fun into {x;y;c} ->
[ "x", into.int x
; "y", into.int y
; "c", into.string c
]
} ;;
type 't
tuple_encoder = {
|
tuple_emit : |
val tuple : 'a tuple_encoder -> 'a encoder
General encoding of tuples (returns a list of values)
val pair : 'a encoder ->
'b encoder -> ('a * 'b) encoder
val triple : 'a encoder ->
'b encoder ->
'c encoder -> ('a * 'b * 'c) encoder
val quad : 'a encoder ->
'b encoder ->
'c encoder ->
'd encoder -> ('a * 'b * 'c * 'd) encoder
type 's
sum_encoder = {
|
sum_emit : |
val sum : 'a sum_encoder -> 'a encoder
val sum0 : ('a -> string) -> 'a encoder
Constant sums, only put the name
val sum_fix : ('a encoder -> 'a sum_encoder) ->
'a encoder
Fixpoint on sum types
Example:
type tree = Empty | Leaf of int | Node of tree * tree;;
let encode_tree = sum_fix
(fun self -> {sum_emit=fun into x -> match x with
| Empty -> "empty", []
| Leaf i -> "leaf", [int.emit into i]
| Node (l,r) -> "node", [self.emit into l; self.emit into r]
});;
val option : 'a encoder -> 'a option encoder