Module Runtime.Helper

Module contains helper function for serializing and deserializing tuples, records and variants. Deserialization functions may raise Helper.Protocol exception. It is recommended that the calling functions convert this exception into a Driver.Protocol_exception

val list_map : f:('a -> 'b) -> 'a list -> 'b list
exception Protocol_error of string

Excpetion raised if the type could not be serialized

val map_record_in : t a b. (string -> string) -> ('t'a'b) Record_in.t -> ('t'a'b) Record_in.t

Map fields names of a Record_in structure

val to_record : t constr b. ?⁠strict:bool -> ('t'constr'b) Record_in.t -> 'constr -> (string * 't) list -> 'b

to_record spec constructor ts returns the constructed value. ts is a associative array (string * t) list, mapping fields to the deserialized value t if strict is true, an error will be raised if input contains an unknown field. If dublicate fields are found in the input, an error is raised

val map_record_out : t a. (string -> string) -> ('t'a't) Record_out.t -> ('t'a't) Record_out.t

Map fields names of a Record_out structure

type 't serialize_record = (string * 't) list -> 't
val of_record : a t. omit_default:bool -> 't serialize_record -> ('t'a't) Record_out.t -> 'a

of_record map_f spec produces a valid deserialisation function for a record type The map_f function is called to produce the serialized result from a field_name, t association list. If omit_default is true, then default values are omitted from the output

val to_tuple : t a b. ('t'a'b) Tuple_in.t -> 'a -> 't list -> 'b

to_tuple spec tlist produces a tuple from the serialized values in tlist

type 't serialize_tuple = 't list -> 't
val of_tuple : t a. 't serialize_tuple -> ('t'a't) Tuple_out.t -> 'a
type 't serialize_variant = string -> 't list -> 't
val of_variant : t. 't serialize_variant -> string -> ('t'a't) Tuple_out.t -> 'a

of_variant spec v serializes v and returns the serialized values as a list or map

val map_constructor_names : (string -> string) -> ('t'a) Variant_in.t list -> ('t'a) Variant_in.t list

Map field names in all inline records of the spec

val to_variant : ('t'a) Variant_in.t list -> string -> 't list -> 'a