123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169# 1 "ppx/native/common/ppx_deriving_json_common.ml"openStdLabelsopenPpxlibopenAst_builder.DefaultopenPpx_deriving_tools.Convletget_of_variant_case?mark_as_seen~variant~polyvariant=function|Vcs_ctx_variantctx->Attribute.get?mark_as_seenvariantctx|Vcs_ctx_polyvariantctx->Attribute.get?mark_as_seenpolyvariantctxletget_of_variant?mark_as_seen~variant~polyvariant=function|Vrt_ctx_variantctx->Attribute.get?mark_as_seenvariantctx|Vrt_ctx_polyvariantctx->Attribute.get?mark_as_seenpolyvariantctxletattr_json_namectx=Attribute.declare"json.name"ctxAst_pattern.(single_expr_payload(estring__'))(funx->x)letvcs_attr_json_name=letvariant=attr_json_nameAttribute.Context.constructor_declarationinletpolyvariant=attr_json_nameAttribute.Context.rtaginget_of_variant_case~variant~polyvariantletattr_json_allow_anyctx=Attribute.declare_flag"json.allow_any"ctxletvcs_attr_json_allow_any=letvariant=attr_json_allow_anyAttribute.Context.constructor_declarationinletpolyvariant=attr_json_allow_anyAttribute.Context.rtaginfun?mark_as_seenctx->matchget_of_variant_case~variant~polyvariant?mark_as_seenctxwith|None->false|Some()->trueletld_attr_json_key=Attribute.get(Attribute.declare"json.key"Attribute.Context.label_declarationAst_pattern.(single_expr_payload(estring__'))(funx->x))letld_attr_json_option=Attribute.get(Attribute.declare"json.option"Attribute.Context.label_declarationAst_pattern.(pstrnil)())letattr_json_allow_extra_fieldsctx=Attribute.declare"json.allow_extra_fields"ctxAst_pattern.(pstrnil)()lettd_attr_json_allow_extra_fields=Attribute.get(attr_json_allow_extra_fieldsAttribute.Context.type_declaration)letcd_attr_json_allow_extra_fields=Attribute.get(attr_json_allow_extra_fieldsAttribute.Context.constructor_declaration)letld_attr_json_default=Attribute.get(Attribute.declare"json.default"Attribute.Context.label_declarationAst_pattern.(single_expr_payload__)(funx->x))letld_attr_json_drop_default=Attribute.get(Attribute.declare"json.drop_default"Attribute.Context.label_declarationAst_pattern.(pstrnil)())letld_attr_defaultld=matchld_attr_json_defaultldwith|Somee->Somee|None->(matchld_attr_json_optionldwith|Some()->letloc=ld.pld_locinSome[%exprStdlib.Option.None]|None->None)letld_drop_defaultld=letloc=ld.pld_locinmatchld_attr_json_drop_defaultld,ld_attr_json_optionldwith|Some(),None->Location.raise_errorf~loc"found [@drop_default] attribute without [@option]"|Some(),Some()->`Drop_option|None,_->`Noletexpand_via~what~throughmake~ctxt(rec_flag,tds)=letloc=Expansion_context.Deriver.derived_item_locctxtinletexpand_one(td:type_declaration)=letloc=td.ptype_locinletpat=let{txt;loc}=td.ptype_nameinlettxt=Expansion_helpers.manglewhattxtinppat_var~loc{Location.txt;loc}inletname_of_td_paramidx(ty,_)=matchty.ptyp_descwith|Ptyp_any->Printf.sprintf"_%d"idx|Ptyp_varname->name|_->Location.raise_errorf~loc:ty.ptyp_loc"unsupported type parameter"inletnames=List.mapitd.ptype_params~f:name_of_td_paraminletexpr=letof_json=let{txt;loc=_}=td.ptype_nameinlettxt=Expansion_helpers.manglethroughtxtinletof_json=pexp_ident~loc{loc;txt=lidenttxt}inpexp_apply~locof_json(List.mapnames~f:(funname->Nolabel,evar~locname))inletbody=make~locof_jsoninList.fold_left(List.revnames)~init:body~f:(funename->[%exprfun[%ppvar~locname]->[%ee]])invalue_binding~loc~pat~exprinpstr_value_list~locrec_flag(List.maptds~f:expand_one)moduleOf_json_string=structletexpand=expand_via~what:(Expansion_helpers.Suffix"of_json_string")~through:(Expansion_helpers.Suffix"of_json")(fun~locof_json->[%exprfun_json->[%eof_json](Melange_json.of_string_json)])letregister~of_json()=Deriving.add"of_json_string"~str_type_decl:(Deriving.Generator.V2.make~deps:[of_json]Deriving.Args.emptyexpand)endmoduleTo_json_string=structletexpand=expand_via~what:(Expansion_helpers.Suffix"to_json_string")~through:(Expansion_helpers.Suffix"to_json")(fun~locto_json->[%exprfun_data->Melange_json.to_string([%eto_json]_data)])letregister~to_json()=Deriving.add"to_json_string"~str_type_decl:(Deriving.Generator.V2.make~deps:[to_json]Deriving.Args.emptyexpand)endmoduleJson_string=structletexpand~ctxttds=Of_json_string.expand~ctxttds@To_json_string.expand~ctxttdsletregister~json()=Deriving.add"json_string"~str_type_decl:(Deriving.Generator.V2.make~deps:[json]Deriving.Args.emptyexpand)end