package Ġedu . by u . u api . server . sub resources . list Ċ Ċ import Ġedu . by u . u api . model . U API SortOrder Ċ import Ġedu . by u . u api . server . inputs . create Ċ import Ġedu . by u . u api . server . response . Response Field Ċ import Ġedu . by u . u api . server . response . U API Response Init Ċ import Ġedu . by u . u api . server . response . u api Response Ċ import Ġedu . by u . u api . server . scal ars . Enum Scalar Type Ċ import Ġedu . by u . u api . server . spi .* Ċ import Ġedu . by u . u api . server . spi . reflect ive . Reflect ive Filter Param Reader Ċ import Ġedu . by u . u api . server . spi . reflect ive . Reflect ive Id Param Reader Ċ import Ġedu . by u . u api . server . sub resources . Sub resource Ċ import Ġedu . by u . u api . server . sub resources . Sub resource RequestContext Ċ import Ġedu . by u . u api . server . types . Create Result Ċ import Ġedu . by u . u api . server . types . Delete Result Ċ import Ġedu . by u . u api . server . types . Model Holder Ċ import Ġedu . by u . u api . server . types . Update Result Ċ import Ġedu . by u . u api . server . util . ex trap olate GenericType Ċ import Ġedu . by u . u api . spi . U API TypeError Ċ import Ġedu . by u . u api . spi . dictionary . Type Dictionary Ċ import Ġedu . by u . u api . spi . input .* Ċ import Ġedu . by u . u api . spi . validation . Validation Engine Ċ import Ġedu . by u . u api . spi . validation . Validator Ċ import Ġedu . by u . u api . utility . take If Type Ċ import Ġkotlin . reflect . K Class Ċ import Ġkotlin . reflect . full . primary Constructor Ċ Ċ interface ĠList Sub resource < User Context Ġ: ĠAny , ĠParent Ġ: ĠModel Holder , ĠId Ġ: ĠAny , ĠModel Ġ: ĠAny , ĠParams Ġ: ĠList Params > ĊĠĠĠ Ġ: ĠSub resource < User Context , ĠParent , ĠModel > Ġ{ ĊĊĠĠĠ Ġval Ġplural Name : ĠString ĊĊĠĠĠ Ġval Ġsingle Name : ĠString ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġdefault Single Name () ĊĊĠĠĠ Ġval Ġid Type : ĠK Class < Id > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġex trap olate GenericType (" Id ", ĠList Sub resource < *, Ġ*, Ġ*, Ġ*, Ġ* >:: id Type ) ĊĊĠĠĠ Ġval Ġscalar Id ParamName : ĠString ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġthis . single Name Ġ+ Ġ"_ id " ĊĊĠĠĠ Ġfun Ġload Model ( ĊĠĠĠĠĠĠĠ Ġrequest Context : ĠSub resource RequestContext , ĊĠĠĠĠĠĠĠ Ġuser Context : ĠUser Context , ĊĠĠĠĠĠĠĠ Ġparent : ĠParent , ĊĠĠĠĠĠĠĠ Ġid : ĠId ĊĠĠĠ Ġ): ĠModel ? ĊĊĠĠĠ Ġfun Ġcan User ViewModel ( ĊĠĠĠĠĠĠĠ Ġrequest Context : ĠSub resource RequestContext , ĊĠĠĠĠĠĠĠ Ġuser Context : ĠUser Context , ĊĠĠĠĠĠĠĠ Ġparent : ĠParent , ĊĠĠĠĠĠĠĠ Ġid : ĠId , ĊĠĠĠĠĠĠĠ Ġmodel : ĠModel ĊĠĠĠ Ġ): ĠBoolean ĊĊĠĠĠ Ġfun Ġid From Model ( model : ĠModel ): ĠId ĊĊĠĠĠ Ġ@ Throws ( U API TypeError :: class ) ĊĠĠĠ Ġfun ĠgetId Reader ( ĊĠĠĠĠĠĠĠ Ġdictionary : ĠType Dictionary ĊĠĠĠ Ġ): ĠId Param Reader < Id > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġdefault Id Reader ( dictionary ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġlist ( ĊĠĠĠĠĠĠĠ Ġrequest Context : ĠSub resource RequestContext , ĊĠĠĠĠĠĠĠ Ġuser Context : ĠUser Context , ĊĠĠĠĠĠĠĠ Ġparent : ĠParent , ĊĠĠĠĠĠĠĠ Ġparams : ĠParams ĊĠĠĠ Ġ): ĠList < Model > ĊĊĠĠĠ Ġval Ġlist Params Type : ĠK Class < Params > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġex trap olate GenericType (" Params ", ĠList Sub resource < *, Ġ*, Ġ*, Ġ*, Ġ* >:: list Params Type ) ĊĊĠĠĠ Ġ@ Throws ( U API TypeError :: class ) ĊĠĠĠ Ġfun ĠgetList Param Reader ( dictionary : ĠType Dictionary ): ĠList Param Reader < Params > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġdefault Get List Param Reader ( dictionary ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠTODO : ĠMaybe Ġit Ġwould Ġbe Ġbetter Ġto Ġhave Ġa Ġmap Ġof Ġtypes Ġto Ġproperties Ġdefinitions / render ers ? ĠThat 'll Ġespecially Ġhelp Ġwith Ġtrees Ġof Ġobjects . ĊĠĠĠ Ġ// ĠĠ ĠThen Ġagain , Ġit 's Ġnot ĠTH AT Ġhard Ġto Ġshare Ġaround Ġa Ġlist Ġrepresenting Ġthe Ġproperties Ġfor Ġa Ġgiven Ġtype ... ĊĠĠĠ Ġval Ġresponse Fields : ĠList < Response Field < User Context , ĠModel , Ġ* >> ĊĊĠĠĠ Ġval Ġcreate Operation : ĠCre atable < User Context , ĠParent , ĠId , ĠModel , Ġ* >? ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġthis . take If Type () ĊĊĠĠĠ Ġval Ġupdate Operation : ĠUp datable < User Context , ĠParent , ĠId , ĠModel , Ġ* >? ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġthis . take If Type () ĊĊĠĠĠ Ġval Ġdelete Operation : ĠDe letable < User Context , ĠParent , ĠId , ĠModel >? ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġthis . take If Type () ĊĊĠĠĠ Ġinterface ĠCre atable < User Context Ġ: ĠAny , ĠParent Ġ: ĠModel Holder , ĠId Ġ: ĠAny , ĠModel Ġ: ĠAny , ĠInput Ġ: ĠAny > Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġcan User Create ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Context : ĠSub resource RequestContext , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuser Context : ĠUser Context , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparent : ĠParent ĊĠĠĠĠĠĠĠ Ġ): ĠBoolean ĊĊĠĠĠĠĠĠĠ Ġfun Ġget Create Validator ( validation Engine : ĠValidation Engine ): ĠValidator < Input > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġvalidation Engine . validator For ( create Input ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġhandle Create ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Context : ĠSub resource RequestContext , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuser Context : ĠUser Context , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparent : ĠParent , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinput : ĠInput ĊĠĠĠĠĠĠĠ Ġ): ĠCreate Result < Model > ĊĊĠĠĠĠĠĠĠ Ġval Ġcreate Input : ĠK Class < Input > ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġex trap olate GenericType (" Input ", ĠCre atable < *, Ġ*, Ġ*, Ġ*, Ġ* >:: create Input ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinterface ĠDe letable < User Context Ġ: ĠAny , ĠParent Ġ: ĠModel Holder , ĠId Ġ: ĠAny , ĠModel Ġ: ĠAny > Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġcan User Delete ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Context : ĠSub resource RequestContext , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuser Context : ĠUser Context , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparent : ĠParent , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġid : ĠId , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodel : ĠModel ĊĠĠĠĠĠĠĠ Ġ): ĠBoolean ĊĊĠĠĠĠĠĠĠ Ġfun Ġcan Be Deleted ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparent : ĠParent , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġid : ĠId , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodel : ĠModel ĊĠĠĠĠĠĠĠ Ġ): ĠBoolean ĊĊĠĠĠĠĠĠĠ Ġfun Ġhandle Delete ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Context : ĠSub resource RequestContext , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuser Context : ĠUser Context , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparent : ĠParent , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġid : ĠId , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodel : ĠModel ĊĠĠĠĠĠĠĠ Ġ): ĠDelete Result ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinterface ĠUp datable < User Context Ġ: ĠAny , ĠParent Ġ: ĠModel Holder , ĠId Ġ: ĠAny , ĠModel Ġ: ĠAny , ĠInput Ġ: ĠAny > Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġcan User Update ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Context : ĠSub resource RequestContext , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuser Context : ĠUser Context , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparent : ĠParent , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġid : ĠId , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodel : ĠModel ĊĠĠĠĠĠĠĠ Ġ): ĠBoolean ĊĊĠĠĠĠĠĠĠ Ġfun Ġcan Be Updated ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparent : ĠParent , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġid : ĠId , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodel : ĠModel ĊĠĠĠĠĠĠĠ Ġ): ĠBoolean ĊĊĠĠĠĠĠĠĠ Ġfun Ġget Update Validator ( validation Engine : ĠValidation Engine ): ĠValidator < Input > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġvalidation Engine . validator For ( update Input ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġhandle Update ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Context : ĠSub resource RequestContext , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuser Context : ĠUser Context , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparent : ĠParent , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġid : ĠId , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodel : ĠModel , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinput : ĠInput ĊĠĠĠĠĠĠĠ Ġ): ĠUpdate Result < Model > ĊĊĠĠĠĠĠĠĠ Ġval Ġupdate Input : ĠK Class < Input > ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġex trap olate GenericType (" Input ", ĠUp datable < *, Ġ*, Ġ*, Ġ*, Ġ* >:: update Input ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinterface ĠCre atable With Id < User Context Ġ: ĠAny , ĠParent Ġ: ĠModel Holder , ĠId Ġ: ĠAny , ĠModel Ġ: ĠAny , ĠInput Ġ: ĠAny > Ġ: ĠUp datable < User Context , ĠParent , ĠId , ĠModel , ĠInput > Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġcan User Create With Id ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Context : ĠSub resource RequestContext , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuser Context : ĠUser Context , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparent : ĠParent , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġid : ĠId ĊĠĠĠĠĠĠĠ Ġ): ĠBoolean ĊĊĠĠĠĠĠĠĠ Ġfun Ġhandle Create With Id ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Context : ĠSub resource RequestContext , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuser Context : ĠUser Context , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparent : ĠParent , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġid : ĠId , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinput : ĠInput ĊĠĠĠĠĠĠĠ Ġ): ĠCreate Result < Model > ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinterface ĠSimple < User Context Ġ: ĠAny , ĠParent Ġ: ĠModel Holder , ĠId Ġ: ĠAny , ĠModel Ġ: ĠAny > Ġ: ĠList Sub resource < User Context , ĠParent , ĠId , ĠModel , ĠList Params . Empty > Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġlist Params Type : ĠK Class < List Params . Empty > ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= ĠList Params . Empty :: class ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠgetList Param Reader ( dictionary : ĠType Dictionary ): ĠList Param Reader < List Params . Empty > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠEmpty List Param Reader ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinterface ĠList With Subset < User Context Ġ: ĠAny , ĠParent Ġ: ĠModel Holder , ĠId Ġ: ĠAny , ĠModel Ġ: ĠAny , ĠCollection Params Ġ: ĠList Params . With Subset > Ġ: ĊĠĠĠĠĠĠĠ ĠList Sub resource < User Context , ĠParent , ĠId , ĠModel , ĠCollection Params > Ġ{ ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġlist ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Context : ĠSub resource RequestContext , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuser Context : ĠUser Context , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparent : ĠParent , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparams : ĠCollection Params ĊĠĠĠĠĠĠĠ Ġ): ĠList With Total < Model > ĊĊĠĠĠĠĠĠĠ Ġval Ġlist Default Sub setSize : ĠInt ĊĠĠĠĠĠĠĠ Ġval Ġlist Max Sub setSize : ĠInt ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinterface ĠList With Search < User Context Ġ: ĠAny , ĠParent Ġ: ĠModel Holder , ĠId Ġ: ĠAny , ĠModel Ġ: ĠAny , ĠCollection Params Ġ: ĠList Params . With Search < Search Context >, ĠSearch Context Ġ: ĠEnum < Search Context >> ĊĠĠĠĠĠĠĠ Ġ: ĠList Sub resource < User Context , ĠParent , ĠId , ĠModel , ĠCollection Params > Ġ{ ĊĊĠĠĠĠĠĠĠ Ġfun Ġlist Search Contexts ( value : ĠSearch Context ): ĠCollection < String > ĊĊĠĠĠĠĠĠĠ Ġ@ Throws ( U API TypeError :: class ) ĊĠĠĠĠĠĠĠ Ġfun ĠgetList Search Param Reader ( dictionary : ĠType Dictionary ): ĠSearch Params Reader < Search Context > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġdefault List Search Param Reader ( dictionary ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Throws ( U API TypeError :: class ) ĊĠĠĠĠĠĠĠ Ġfun ĠgetList Search Context Type ( dictionary : ĠType Dictionary ): ĠEnum Scalar Type < Search Context > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠDefault Parameter Style Enum Scalar ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġex trap olate GenericType (" Search Context ", ĠList With Search < *, Ġ*, Ġ*, Ġ*, Ġ*, Ġ* >:: getList Search Context Type ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinterface ĠList With Sort < User Context Ġ: ĠAny , ĠParent Ġ: ĠModel Holder , ĠId Ġ: ĠAny , ĠModel Ġ: ĠAny , ĠCollection Params Ġ: ĠList Params . With Sort < Sort Property >, ĠSort Property Ġ: ĠEnum < Sort Property >> ĊĠĠĠĠĠĠĠ Ġ: ĠList Sub resource < User Context , ĠParent , ĠId , ĠModel , ĠCollection Params > Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġlist Default Sort Properties : ĠList < Sort Property > ĊĠĠĠĠĠĠĠ Ġval Ġlist Default SortOrder : ĠU API SortOrder ĊĊĠĠĠĠĠĠĠ Ġ@ Throws ( U API TypeError :: class ) ĊĠĠĠĠĠĠĠ Ġfun ĠgetList Sort PropertyType ( type Dictionary : ĠType Dictionary ): ĠEnum Scalar Type < Sort Property > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠDefault Parameter Style Enum Scalar ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġex trap olate GenericType (" Sort Property ", ĠList With Sort < *, Ġ*, Ġ*, Ġ*, Ġ*, Ġ* >:: getList Sort PropertyType ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Throws ( U API TypeError :: class ) ĊĠĠĠĠĠĠĠ Ġfun ĠgetList Sort Params Reader ( type Dictionary : ĠType Dictionary ): ĠSort Params Reader < Sort Property > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġdefault List Sort Params Reader ( type Dictionary ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinterface ĠList With Filters < User Context Ġ: ĠAny , ĠParent Ġ: ĠModel Holder , ĠId Ġ: ĠAny , ĠModel Ġ: ĠAny , ĠCollection Params Ġ: ĠList Params . With Filters < Filters >, ĠFilters Ġ: ĠAny > ĊĠĠĠĠĠĠĠ Ġ: ĠList Sub resource < User Context , ĠParent , ĠId , ĠModel , ĠCollection Params > Ġ{ ĊĊĊĠĠĠĠĠĠĠ Ġval Ġlist Filter Param Type : ĠK Class < Filters > ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġthis . ex trap olate GenericType (" Filters ", ĠList With Filters < *, Ġ*, Ġ*, Ġ*, Ġ*, Ġ* >:: list Filter Param Type ) ĊĊĠĠĠĠĠĠĠ Ġ@ Throws ( U API TypeError :: class ) ĊĠĠĠĠĠĠĠ Ġfun ĠgetList Filter Param Reader ( type Dictionary : ĠType Dictionary ): ĠFilter Params Reader < Filters > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠReflect ive Filter Param Reader . create ( list Filter Param Type , Ġtype Dictionary ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġfun ĠList Sub resource < *, Ġ*, Ġ*, Ġ*, Ġ* >. default Single Name (): ĠString Ġ{ ĊĠĠĠ Ġif Ġ( plural Name . endsWith (" s ")) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġplural Name . drop Last ( 1 ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġplural Name Ċ } Ċ Ċ private Ġfun Ġ< Id Ġ: ĠAny , ĠModel Ġ: ĠAny , ĠUser Context Ġ: ĠAny > ĠList Sub resource < User Context , Ġ*, ĠId , ĠModel , Ġ* >. default Id Reader ( ĊĠĠĠ Ġdictionary : ĠType Dictionary Ċ ): ĠId Param Reader < Id > Ġ{ ĊĠĠĠ Ġval Ġid Type Ġ= Ġthis . id Type ĊĠĠĠ Ġval Ġprefix Ġ= Ġthis . single Name Ġ+ Ġ"_" ĊĠĠĠ Ġif Ġ( dictionary . is Scalar Type ( id Type )) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠScalar TypeId Param Reader ( this . scalar Id ParamName , Ġdictionary . require Scalar Type ( id Type )) ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn ĠReflect ive Id Param Reader . create ( prefix , Ġid Type , Ġdictionary ) Ċ } Ċ Ċ @ Throws ( U API TypeError :: class ) Ċ internal Ġfun Ġ< Params Ġ: ĠList Params > ĊĠĠĠ ĠList Sub resource < *, Ġ*, Ġ*, Ġ*, ĠParams >. default Get List Param Reader ( ĊĠĠĠ Ġdictionary : ĠType Dictionary Ċ ): ĠList Param Reader < Params > Ġ{ ĊĠĠĠ Ġif Ġ( list Params Type Ġ== ĠList Params . Empty :: class ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠĠĠĠĠ Ġreturn ĠEmpty List Param Reader Ġas ĠList Param Reader < Params > ĊĠĠĠ Ġ} ĊĠĠĠ Ġif Ġ(! list Params Type . is Data ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthrow ĠU API TypeError . create ( list Params Type , Ġ" List Ġparameter Ġtype Ġmust Ġbe Ġa Ġdata Ġclass .") ĊĠĠĠ Ġ} ĊĠĠĠ Ġval Ġctor Ġ= Ġlist Params Type . primary Constructor ĊĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠU API TypeError . create ( list Params Type , Ġ" List Ġparameter Ġtype Ġmust Ġhave Ġa Ġprimary Ġconstructor .") ĊĊĠĠĠ Ġval Ġsearch Ġ= Ġthis . take If Type < List Sub resource . List With Search < *, Ġ*, Ġ*, Ġ*, Ġ*, Ġ* >>() ?. getList Search Param Reader ( dictionary ) ĊĠĠĠ Ġval Ġfilter Ġ= Ġthis . take If Type < List Sub resource . List With Filters < *, Ġ*, Ġ*, Ġ*, Ġ*, Ġ* >>() ?. getList Filter Param Reader ( dictionary ) ĊĠĠĠ Ġval Ġsort Ġ= Ġthis . take If Type < List Sub resource . List With Sort < *, Ġ*, Ġ*, Ġ*, Ġ*, Ġ* >>() ?. getList Sort Params Reader ( dictionary ) ĊĠĠĠ Ġval Ġsubset Ġ= Ġthis . take If Type < List Sub resource . List With Subset < *, Ġ*, Ġ*, Ġ*, Ġ* >>() ?. let Ġ{ Ġit Ġ-> ĊĠĠĠĠĠĠĠ ĠSub set Params Reader ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdefault Size Ġ= Ġit . list Default Sub setSize , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠmaxSize Ġ= Ġit . list Max Sub setSize ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn ĠDefault List Param Reader . create ( ĊĠĠĠĠĠĠĠ Ġparams Type Ġ= Ġlist Params Type , ĊĠĠĠĠĠĠĠ Ġsearch Ġ= Ġsearch , ĊĠĠĠĠĠĠĠ Ġfilter Ġ= Ġfilter , ĊĠĠĠĠĠĠĠ Ġsort Ġ= Ġsort , ĊĠĠĠĠĠĠĠ Ġsubset Ġ= Ġsubset , ĊĠĠĠĠĠĠĠ Ġconstructor Ġ= Ġctor ĊĠĠĠ Ġ) Ċ } Ċ Ċ @ Throws ( U API TypeError :: class ) Ċ internal Ġfun Ġ< Search Context Ġ: ĠEnum < Search Context >> ĊĠĠĠ ĠList Sub resource . List With Search < *, Ġ*, Ġ*, Ġ*, Ġ*, ĠSearch Context >. default List Search Param Reader ( ĊĠĠĠ Ġdictionary : ĠType Dictionary Ċ ): ĠSearch Params Reader < Search Context > Ġ{ ĊĠĠĠ Ġval Ġcontext Type Ġ= ĠgetList Search Context Type ( dictionary ) ĊĠĠĠ Ġval Ġcontext Class Ġ= Ġcontext Type . type ĊĠĠĠ Ġval Ġsearch Contexts Ġ= Ġcontext Type . enum Constants . map Ġ{ Ġit Ġto Ġlist Search Contexts ( it ) Ġ}. toMap () ĊĊĠĠĠ Ġif Ġ( search Contexts . any Ġ{ Ġit . value . isEmpty () Ġ}) Ġ{ ĊĠĠĠĠĠĠĠ Ġthrow ĠU API TypeError . create ( context Type . type , Ġ"${ this :: class . simple Name }. list Search Contexts Ġmust Ġreturn Ġa Ġnon - empty Ġset Ġfor Ġevery Ġvalue Ġof Ġ${ context Class . simple Name }") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn ĠDefault Search Params Reader . create ( ĊĠĠĠĠĠĠĠ Ġcontext Type , Ġsearch Contexts ĊĠĠĠ Ġ) Ċ } Ċ Ċ @ Throws ( U API TypeError :: class ) Ċ internal Ġfun Ġ< Sort Property Ġ: ĠEnum < Sort Property >> ĊĠĠĠ ĠList Sub resource . List With Sort < *, Ġ*, Ġ*, Ġ*, Ġ*, ĠSort Property >. default List Sort Params Reader ( ĊĠĠĠ Ġtype Dictionary : ĠType Dictionary Ċ ): ĠSort Params Reader < Sort Property > Ġ{ ĊĠĠĠ Ġval Ġsort Prop Type Ġ= ĠgetList Sort PropertyType ( type Dictionary ) ĊĊĠĠĠ Ġreturn ĠDefault Sort Params Reader . create ( ĊĠĠĠĠĠĠĠ Ġsort Prop Type , ĊĠĠĠĠĠĠĠ ĠEnum Scalar Type ( U API SortOrder :: class ), ĊĠĠĠĠĠĠĠ Ġlist Default Sort Properties , ĊĠĠĠĠĠĠĠ Ġlist Default SortOrder ĊĠĠĠ Ġ) Ċ } Ċ Ċ inline Ġfun Ġ< User Context Ġ: ĠAny , ĠModel Ġ: ĠAny > ĠList Sub resource < User Context , Ġ*, Ġ*, ĠModel , Ġ* >. fields ( fn : ĠU API Response Init < User Context , ĠModel >. () Ġ-> ĠUnit ) ĊĠĠĠ Ġ: ĠList < Response Field < User Context , ĠModel , Ġ* >> Ġ= Ġu api Response ( fn ) Ċ