/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 2 0 ĠM ate us z ĠAr mat ys Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġpl . m aken ika . graph lite Ċ Ċ import Ġpl . m aken ika . graph lite . impl . Field Impl Ċ import Ġpl . m aken ika . graph lite . impl . Index able Field Impl Ċ import Ġpl . m aken ika . graph lite . impl . Index able Scalar Field Impl Ċ Ċ private Ġenum Ġclass ĠBase Field Code ( val Ġvalue : ĠString ) Ġ{ ĊĠĠĠ ĠBl b (" bl b "), ĊĠĠĠ ĠD bl (" dbl "), ĊĠĠĠ ĠGeo (" geo "), ĊĠĠĠ ĠL ng (" lng "), ĊĠĠĠ ĠT xt (" txt "), ĊĠĠĠ ĠT xt F ts (" fts ") Ċ } Ċ Ċ public Ġsealed Ġclass ĠFieldType ( private Ġval Ġbase Field Code : ĠBase Field Code , Ġinternal Ġval Ġoptional : ĠBoolean ) Ġ{ ĊĠĠĠ Ġinternal Ġclass ĠBlob ( optional : ĠBoolean ) Ġ: ĠFieldType ( Base Field Code . Bl b , Ġoptional ) ĊĠĠĠ Ġinternal Ġclass ĠDouble Float ( optional : ĠBoolean ) Ġ: ĠFieldType ( Base Field Code . D bl , Ġoptional ) ĊĠĠĠ Ġinternal Ġclass ĠGeo ( optional : ĠBoolean ) Ġ: ĠFieldType ( Base Field Code . Geo , Ġoptional ) ĊĠĠĠ Ġinternal Ġclass ĠLong Int ( optional : ĠBoolean ) Ġ: ĠFieldType ( Base Field Code . Lng , Ġoptional ) ĊĠĠĠ Ġinternal Ġclass ĠText ( optional : ĠBoolean ) Ġ: ĠFieldType ( Base Field Code . Txt , Ġoptional ) ĊĠĠĠ Ġinternal Ġclass ĠText F ts ( optional : ĠBoolean ) Ġ: ĠFieldType ( Base Field Code . Txt F ts , Ġoptional ) ĊĊĠĠĠ Ġinternal Ġval Ġcode : ĠString ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġbase Field Code . value Ġ+ Ġif Ġ( optional ) Ġ" ?" Ġelse Ġ"" ĊĊĠĠĠ Ġoverride Ġfun Ġequals ( other : ĠAny ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( this Ġ=== Ġother ) Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġif Ġ( other Ġ== Ġnull ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġif Ġ( other Ġ! is ĠFieldType ) Ġreturn Ġfalse ĊĊĠĠĠĠĠĠĠ Ġif Ġ( base Field Code Ġ!= Ġother . base Field Code ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġif Ġ( optional Ġ!= Ġother . optional ) Ġreturn Ġfalse ĊĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠhashCode (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġresult Ġ= Ġbase Field Code . hashCode () ĊĠĠĠĠĠĠĠ Ġresult Ġ= Ġ 3 1 Ġ* Ġresult Ġ+ Ġoptional . hashCode () ĊĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ" FieldType ( code =$ code )" ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġinternal Ġfun Ġfrom Code ( code : ĠString ): ĠFieldType Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoptional Ġ= Ġcode . endsWith (' ?') ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbase Code Ġ= Ġcode . remove Suffix (" ?") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfield Code Ġ= ĠBase Field Code . values (). find Ġ{ Ġit . value Ġ== Ġbase Code Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġerror (" Unknown Ġfield Ġvalue Ġcode : Ġ$ base Code ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( field Code ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBase Field Code . Bl b Ġ-> ĠBlob ( optional ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBase Field Code . D bl Ġ-> ĠDouble Float ( optional ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBase Field Code . Geo Ġ-> ĠGeo ( optional ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBase Field Code . Lng Ġ-> ĠLong Int ( optional ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBase Field Code . Txt Ġ-> ĠText ( optional ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBase Field Code . Txt F ts Ġ-> ĠText F ts ( optional ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ public Ġinterface ĠField < in ĠS Ġ: ĠSchema , ĠT > Ġ{ ĊĠĠĠ Ġpublic Ġval Ġhandle : ĠField Handle ĊĠĠĠ Ġpublic Ġval Ġtype : ĠFieldType ĊĊĠĠĠ Ġpublic Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġinternal Ġfun Ġ< S Ġ: ĠSchema > Ġblob ( name : ĠString ): ĠField < S , ĠByteArray > Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmake ( name , ĠFieldType . Blob ( false )) ĊĊĠĠĠĠĠĠĠ Ġinternal Ġfun Ġ< S Ġ: ĠSchema > Ġblob Optional ( name : ĠString ): ĠField < S , ĠByteArray ?> Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmake ( name , ĠFieldType . Blob ( true )) ĊĊĠĠĠĠĠĠĠ Ġinternal Ġfun Ġ< S Ġ: ĠSchema > Ġgeo ( name : ĠString ): ĠIndex able Field < S , ĠGeo Bounds > Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmake Indexed ( name , ĠFieldType . Geo ( false )) ĊĊĠĠĠĠĠĠĠ Ġinternal Ġfun Ġ< S Ġ: ĠSchema > Ġgeo Optional ( name : ĠString ): ĠIndex able Field < S , ĠGeo Bounds ?> Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmake Indexed ( name , ĠFieldType . Geo ( true )) ĊĊĠĠĠĠĠĠĠ Ġinternal Ġfun Ġ< S Ġ: ĠSchema > Ġlong ( name : ĠString ): ĠIndex able Scalar Field < S , ĠLong > Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmake Indexed Scalar ( name , ĠFieldType . Long Int ( false )) ĊĊĠĠĠĠĠĠĠ Ġinternal Ġfun Ġ< S Ġ: ĠSchema > Ġlong Optional ( name : ĠString ): ĠIndex able Scalar Field < S , ĠLong ?> Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmake Indexed Scalar ( name , ĠFieldType . Long Int ( true )) ĊĊĠĠĠĠĠĠĠ Ġinternal Ġfun Ġ< S Ġ: ĠSchema > Ġdouble ( name : ĠString ): ĠIndex able Scalar Field < S , ĠDouble > Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmake Indexed Scalar ( name , ĠFieldType . Double Float ( false )) ĊĊĠĠĠĠĠĠĠ Ġinternal Ġfun Ġ< S Ġ: ĠSchema > Ġdouble Optional ( name : ĠString ): ĠIndex able Scalar Field < S , ĠDouble ?> Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmake Indexed Scalar ( name , ĠFieldType . Double Float ( true )) ĊĊĠĠĠĠĠĠĠ Ġinternal Ġfun Ġ< S Ġ: ĠSchema > Ġtext ( name : ĠString ): ĠIndex able Scalar Field < S , ĠString > Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmake Indexed Scalar ( name , ĠFieldType . Text ( false )) ĊĊĠĠĠĠĠĠĠ Ġinternal Ġfun Ġ< S Ġ: ĠSchema > Ġtext Optional ( name : ĠString ): ĠIndex able Scalar Field < S , ĠString ?> Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmake Indexed Scalar ( name , ĠFieldType . Text ( true )) ĊĊĠĠĠĠĠĠĠ Ġinternal Ġfun Ġ< S Ġ: ĠSchema > Ġtext F ts ( name : ĠString ): ĠIndex able Scalar Field < S , ĠString > Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmake Indexed Scalar ( name , ĠFieldType . Text F ts ( false )) ĊĊĠĠĠĠĠĠĠ Ġinternal Ġfun Ġ< S Ġ: ĠSchema > Ġtext F ts Optional ( name : ĠString ): ĠIndex able Scalar Field < S , ĠString ?> Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmake Indexed Scalar ( name , ĠFieldType . Text F ts ( true )) ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġ< S Ġ: ĠSchema , ĠT > Ġmake ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtype : ĠFieldType ĊĠĠĠĠĠĠĠ Ġ): ĠField < S , ĠT > Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠField Impl ( Field Handle ( name ), Ġtype ) ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġ< S Ġ: ĠSchema , ĠT > Ġmake Indexed ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtype : ĠFieldType ĊĠĠĠĠĠĠĠ Ġ): ĠIndex able Field < S , ĠT > Ġ= ĠIndex able Field Impl ( Field Handle ( name ), Ġtype ) ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġ< S Ġ: ĠSchema , ĠT > Ġmake Indexed Scalar ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtype : ĠFieldType ĊĠĠĠĠĠĠĠ Ġ): ĠIndex able Scalar Field < S , ĠT > Ġ= ĠIndex able Scalar Field Impl ( Field Handle ( name ), Ġtype ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ public Ġinterface ĠIndex able Field < in ĠS Ġ: ĠSchema , ĠT > Ġ: ĠField < S , ĠT > Ċ Ċ public Ġinterface ĠIndex able Scalar Field < in ĠS Ġ: ĠSchema , ĠT > Ġ: ĠIndex able Field < S , ĠT > Ċ