sig
type 's layout
exception ModifyingSealedStruct of string
type 's t = { layout : 's Record.layout; content : 's Record.content; }
and 's content
val get_layout : 'a Record.t -> 'a Record.layout
exception AllocatingUnsealedStruct of string
module Type :
sig
type 'a t
val name : 'a Record.Type.t -> string
val of_yojson :
'a Record.Type.t -> Yojson.Safe.json -> ('a, string) Result.result
val to_yojson : 'a Record.Type.t -> 'a -> Yojson.Safe.json
val make :
name:string ->
to_yojson:('a -> Yojson.Safe.json) ->
of_yojson:(Yojson.Safe.json -> ('a, string) Result.result) ->
unit -> 'a Record.Type.t
val make_string :
name:string ->
to_string:('a -> string) ->
of_string:(string -> ('a, string) Result.result) ->
unit -> 'a Record.Type.t
val exn : exn Record.Type.t
exception UnserializedException of string
val unit : unit Record.Type.t
val string : string Record.Type.t
val int : int Record.Type.t
val int32 : int32 Record.Type.t
val int64 : int64 Record.Type.t
val list : 'a Record.Type.t -> 'a list Record.Type.t
val product_2 :
string ->
'a Record.Type.t ->
string -> 'b Record.Type.t -> ('a * 'b) Record.Type.t
val result :
'a Record.Type.t ->
'b Record.Type.t -> ('a, 'b) Result.result Record.Type.t
val view :
name:string ->
read:('a -> ('b, string) Result.result) ->
write:('b -> 'a) -> 'a Record.Type.t -> 'b Record.Type.t
end
module Field :
sig
type ('a, 's) t
val name : ('a, 's) Record.Field.t -> string
val ftype : ('a, 's) Record.Field.t -> 'a Record.Type.t
end
val get : 's Record.t -> ('a, 's) Record.Field.t -> 'a
val set : 's Record.t -> ('a, 's) Record.Field.t -> 'a -> unit
exception UndefinedField of string
module Polid :
sig
type 'a t
val fresh : unit -> 'a Record.Polid.t
type ('a, 'b) equal =
Equal : ('a, 'a) Record.Polid.equal
| Different : ('a, 'b) Record.Polid.equal
val equal :
'a Record.Polid.t -> 'b Record.Polid.t -> ('a, 'b) Record.Polid.equal
val to_int : 'a Record.Polid.t -> int
val is_equal : 'a Record.Polid.t -> 'b Record.Polid.t -> bool
end
module Unsafe :
sig
val declare : string -> 's Record.layout
val field :
's Record.layout ->
string -> 'a Record.Type.t -> ('a, 's) Record.Field.t
val seal : 's Record.layout -> unit
val make : 's Record.layout -> 's Record.t
val layout_name : 's Record.layout -> string
val layout_id : 's Record.layout -> 's Record.Polid.t
end
module Safe :
sig
module type LAYOUT =
sig
type s
val layout : Record.Safe.LAYOUT.s Record.layout
val field :
string ->
'a Record.Type.t -> ('a, Record.Safe.LAYOUT.s) Record.Field.t
val seal : unit -> unit
val layout_name : string
val layout_id : Record.Safe.LAYOUT.s Record.Polid.t
val make : unit -> Record.Safe.LAYOUT.s Record.t
end
val declare : string -> (module Record.Safe.LAYOUT)
end
val to_yojson : 'a Record.t -> Yojson.Safe.json
val of_yojson :
'a Record.layout ->
Yojson.Safe.json -> ('a Record.t, string) Result.result
module Util :
sig
val layout_type : 'a Record.layout -> 'a Record.t Record.Type.t
val declare0 : name:string -> 's Record.layout
val declare1 :
name:string ->
f1_name:string ->
f1_type:'a Record.Type.t ->
's Record.layout * ('a, 's) Record.Field.t
val declare2 :
name:string ->
f1_name:string ->
f1_type:'a1 Record.Type.t ->
f2_name:string ->
f2_type:'a2 Record.Type.t ->
's Record.layout * ('a1, 's) Record.Field.t *
('a2, 's) Record.Field.t
val declare3 :
name:string ->
f1_name:string ->
f1_type:'a1 Record.Type.t ->
f2_name:string ->
f2_type:'a2 Record.Type.t ->
f3_name:string ->
f3_type:'a3 Record.Type.t ->
's Record.layout * ('a1, 's) Record.Field.t *
('a2, 's) Record.Field.t * ('a3, 's) Record.Field.t
val declare4 :
name:string ->
f1_name:string ->
f1_type:'a1 Record.Type.t ->
f2_name:string ->
f2_type:'a2 Record.Type.t ->
f3_name:string ->
f3_type:'a3 Record.Type.t ->
f4_name:string ->
f4_type:'a4 Record.Type.t ->
's Record.layout * ('a1, 's) Record.Field.t *
('a2, 's) Record.Field.t * ('a3, 's) Record.Field.t *
('a4, 's) Record.Field.t
end
val equal :
'a Record.layout -> 'b Record.layout -> ('a, 'b) Record.Polid.equal
end