open Types let encode_exn jsont v = Jsont_bytesrw.encode_string jsont v |> Result.get_ok let encode jsont v = Jsont_bytesrw.encode_string jsont v let decode jsont v = Jsont_bytesrw.decode_string jsont v module Error_detail = struct open Error_detail let jsont = let make code hint = { code; hint } in let enc_code v = v.code in let enc_hint v = v.hint in Jsont.Object.map ~kind:"ErrorDetail" make |> Jsont.Object.mem "code" Jsont.int ~enc:enc_code |> Jsont.Object.opt_mem "hint" Jsont.(string) ~enc:enc_hint |> Jsont.Object.finish end module Timestamp = struct open Timestamp let number_or_never_jsont = let never = let dec s = match s with | "never" -> Never | _ -> Jsont.Error.msg Jsont.Meta.none "unexpected string value" in let enc = function Never -> "never" | _ -> assert false in Jsont.map ~dec ~enc Jsont.string in let number = let dec n = Seconds n in let enc = function Seconds n -> n | _ -> assert false in Jsont.map ~dec ~enc Jsont.number in let enc = function Never -> never | Seconds _ -> number in Jsont.any ~dec_string:never ~dec_number:number ~enc () let jsont = let make t_s = t_s in Jsont.Object.map ~kind:"Timestamp" make |> Jsont.Object.mem "t_s" number_or_never_jsont ~enc:Fun.id |> Jsont.Object.finish end