type ('a, 'b) prop = Jv.prop' let prop : string -> ('a, 'b) prop = Jstr.of_string let get : 'a -> ('a, 'b) prop -> 'b option = fun obj prop -> Jv.get' (Jv.Id.to_jv obj) prop |> Jv.to_option Jv.Id.of_jv let set : 'a -> ('a, 'b) prop -> 'b -> unit = fun obj prop value -> Jv.set' (Jv.Id.to_jv obj) prop (Jv.Id.to_jv value) (* Objects *) type 'a constr = (Jstr.t * Jv.t) let c : ('a, 'b) prop -> 'b -> 'a constr = fun prop v -> (prop, Jv.Id.to_jv v) let obj : 'a constr Array.t -> 'a = fun props -> Jv.Id.of_jv @@ Jv.obj' props (* Arrays *) type 'a array = Jv.t let to_array : 'a array -> 'a Array.t = fun arr -> Jv.to_array Jv.Id.of_jv arr let of_array : 'a Array.t -> 'a array = fun arr -> Jv.of_array Jv.Id.to_jv arr