Module Topkg.Private.Codec

module Codec: sig .. end

Topkg interprocess communication codec.

Codecs for communication between the topkg tool and topkg description files.

Decode errors

type error = 
| Corrupted of (string * string)
| Version of int * int

The type for decode errors.

val pp_error : Stdlib.Format.formatter -> error -> unit

pp_error ppf e prints an unspecified representation of e on ppf.

exception Error of error

Raised on decode errors.


type 'a t 

The type for codec for OCaml values of type 'a.

val v : kind:string ->
enc:('a -> string) -> dec:(string -> 'a) -> 'a t

v kind enc dec is a codec for value identified as kind using enc to encode and dec to decode.

val kind : 'a t -> string

kind c is c's kind.

val enc : 'a t -> 'a -> string

enc c is c's encoder.

val dec : 'a t -> string -> 'a

dec c is c's decoder. The decoder

val dec_result : 'a t -> string -> 'a Topkg.result

dec c is like Topkg.Private.Codec.dec but doesn't raise. The exception is turned into an error message using Topkg.Private.Codec.pp_error.

val with_kind : string -> 'a t -> 'a t

with_kind k c is c with kind k.

val write : Topkg.fpath -> 'a t -> 'a -> unit Topkg.result

write f c v encodes value v with c to f.

val read : Topkg.fpath -> 'a t -> 'a Topkg.result

read f c reads a value with c from f.

Base type codecs

val unit : unit t

unit codecs a ().

val const : 'a -> 'a t

const v codecs the constant v.

val bool : bool t

bool codecs booleans.

val int : int t

int codecs integers.

val string : string t

string codecs strings.

val option : 'a t -> 'a option t

option el codecs el options.

val result : ok:'a t ->
error:'b t -> ('a, 'b) Topkg.r t

result ~ok ~error codecs ok, error results.

val list : 'a t -> 'a list t

list el codecs el lists.

val pair : 'a t ->
'b t -> ('a * 'b) t

pair c0 c1 codecs c0, c1 pairs.

val t3 : 'a t ->
'b t ->
'c t -> ('a * 'b * 'c) t

t3 is like Topkg.Private.Codec.pair but for triples.

val t4 : 'a t ->
'b t ->
'c t ->
'd t -> ('a * 'b * 'c * 'd) t

t4 is like Topkg.Private.Codec.pair but for quadruples.

val t5 : 'a t ->
'b t ->
'c t ->
'd t ->
'e t -> ('a * 'b * 'c * 'd * 'e) t

t5 is like Topkg.Private.Codec.pair but for qintuples.

val alt : kind:string ->
('a -> int) -> 'a t array -> 'a t

alt tag cs codecs values by tagging them with tag and using the corresponding codec in cs.

val version : int -> 'a t -> 'a t

version num c versions codec c with number num. On decode a version number mismatch raises an error see Topkg.Private.Codec.error.

val view : ?kind:string ->
('a -> 'b) * ('b -> 'a) ->
'b t -> 'a t

view kind t c views t as c for codecing.

Topkg types

val msg : [ `Msg of string ] t

msg codecs error messages.

val result_error_msg : 'a t -> 'a Topkg.result t

result_error_msg ok codecs ok or error message results.

val fpath : Topkg.Fpath.t t

fpath codecs files paths.

val cmd : Topkg.Cmd.t t

cmd codecs command line fragments.