1234567891011121314151617181920212223242526272829303132333435363738typet={enum_names:bool;json_names:bool;omit_default_values:bool}(**
Create options for json serialization.
If [enum_names] is true then enums are serialized as strings. If false the integer value is used when serializing.
If [json_name] is true then serialization will use the json field names. If false, the fields names will be used from the protofile as-is.
If [omit_default_values] is false then default scalar values will not be emitted to the json. The default is to omit default values.
*)letmake?(enum_names=true)?(json_names=true)?(omit_default_values=true)()={enum_names;json_names;omit_default_values}letdefault=make()(**/**)(** Perfect hash function *)letto_int{enum_names;json_names;omit_default_values}=letbn=functiontrue->n|false->0inb4enum_names+b2json_names+b1omit_default_valuesletof_intn=letbvn=nlandv=vin{enum_names=b4n;json_names=b2n;omit_default_values=b1n;}letmax_int=to_int{enum_names=true;json_names=true;omit_default_values=true}let%test"perfect hash"=leti=0into_int(of_inti)=ilet%test"perfect hash"=leti=1into_int(of_inti)=ilet%test"perfect hash"=leti=2into_int(of_inti)=ilet%test"perfect hash"=leti=3into_int(of_inti)=ilet%test"perfect hash"=leti=4into_int(of_inti)=ilet%test"perfect hash"=leti=5into_int(of_inti)=ilet%test"perfect hash"=leti=6into_int(of_inti)=ilet%test"perfect hash"=leti=7into_int(of_inti)=i(**/**)