1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253(** JSON types for JSON Schema *)typejson_type=Null|Boolean|Number|Integer|String|Array|Objecttypet=int(** Set of JSON types - using bit flags for efficiency *)letnull_bit=1letboolean_bit=2letnumber_bit=4letinteger_bit=8letstring_bit=16letarray_bit=32letobject_bit=64letempty=0letis_emptyt=t=0letto_bit=function|Null->null_bit|Boolean->boolean_bit|Number->number_bit|Integer->integer_bit|String->string_bit|Array->array_bit|Object->object_bitletcontainssettyp=setlandto_bittyp<>0letaddsettyp=setlorto_bittypletiterfset=ifcontainssetNullthenfNull;ifcontainssetBooleanthenfBoolean;ifcontainssetNumberthenfNumber;ifcontainssetIntegerthenfInteger;ifcontainssetStringthenfString;ifcontainssetArraythenfArray;ifcontainssetObjectthenfObjectletof_listtypes=List.fold_leftaddemptytypeslettype_of=function|`Null->Null|`Bool_->Boolean|`Int_->Integer|`FloatfwhenFloat.is_integerf->Integer|`Float_->Number|`String_->String|`List_->Array|`Assoc_->Objectlet_type_of_extendedjson=matchtype_ofjsonwith|Integer->Number(* Integer is also a Number in JSON Schema *)|t->t