123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136openPrintftypet=Yojson.Basic.t(** The type of a JSON data structure *)typejson=t(** Defined for convenience. *)letclassify=Classify.classifyletdeclassify=Classify.declassifyletto_stringt=Yojson.Basic.to_stringtincludeErrorsletof_strings=tryYojson.Basic.from_stringswithYojson.Json_errormsg->raise(Of_string_errormsg)type'ato_json='a->json(** Describe how to encode a value into JSON. *)letto_json:jsonto_json=funx->xlet()=Printexc.register_printer(function|Of_json_error(Json_errorstr)->Some(sprintf"Melange_json.Of_json_error(Json_error {|%s|})"str)|Of_json_error(Unexpected_variantstr)->Some(sprintf"Melange_json.Of_json_error(Unexpected_variant {|%s|})"str)|_->None)type'aof_json=json->'a(** Describe how to decode a value from JSON. *)letof_json:'aof_json=funx->xmoduleOf_json=structlettypeof=function|`Assoc_->"object"|`Bool_->"bool"|`Float_->"float"|`Int_->"int"|`List_->"array"|`Null->"null"|`String_->"string"letstring=function|`Strings->s|json->of_json_error_type_mismatchjson"string"letbool=function|`Boolb->b|json->of_json_error_type_mismatchjson"bool"letint=function|`Inti->i|json->of_json_error_type_mismatchjson"int"letint64=function|`Stringiasjson->(matchInt64.of_string_optiwith|Somev->v|None->of_json_error_type_mismatchjson"int64 as string")|json->of_json_error_type_mismatchjson"int64 as string"letfloat=function|`Floatf->f|`Inti->float_of_inti|json->of_json_error_type_mismatchjson"float"letunit=function|`Null->()|json->of_json_error_type_mismatchjson"expected null"letoptionv_of_json=function|`Null->None|json->Some(v_of_jsonjson)letlistv_of_json=function|`Listl->List.mapv_of_jsonl|json->of_json_error_type_mismatchjson"array"letarrayv_of_json=function|`Listl->Array.mapv_of_json(Array.of_listl)|json->of_json_error_type_mismatchjson"array"letresultok_of_jsonerr_of_jsonjson=matchjsonwith|`List[`String"Ok";x]->Ok(ok_of_jsonx)|`List[`String"Error";x]->Error(err_of_jsonx)|_->of_json_error{|expected ["Ok"; _] or ["Error"; _]|}~depth:2~jsonendmoduleTo_json=structletstringv=`Stringvletboolv=`Boolvletintv=`Intvletint64v=`String(Int64.to_stringv)letfloatv=`Floatvletunit()=`Nullletlistv_to_jsonvs=`List(List.mapv_to_jsonvs)letarrayv_to_jsonvs=`List(Array.to_list(Array.mapv_to_jsonvs))letoptionv_to_json=functionNone->`Null|Somev->v_to_jsonvletresulta_to_jsonb_to_jsonv=matchvwith|Okx->`List[`String"Ok";a_to_jsonx]|Errorx->`List[`String"Error";b_to_jsonx]endmodulePrimitives=structletstring_of_json=Of_json.stringletbool_of_json=Of_json.boolletfloat_of_json=Of_json.floatletint_of_json=Of_json.intletint64_of_json=Of_json.int64letoption_of_json=Of_json.optionletunit_of_json=Of_json.unitletresult_of_json=Of_json.resultletlist_of_json=Of_json.listletarray_of_json=Of_json.arrayletstring_to_json=To_json.stringletbool_to_json=To_json.boolletfloat_to_json=To_json.floatletint_to_json=To_json.intletint64_to_json=To_json.int64letoption_to_json=To_json.optionletunit_to_json=To_json.unitletresult_to_json=To_json.resultletlist_to_json=To_json.listletarray_to_json=To_json.arrayend