/* Ċ Ġ* ĠCopyright Ġ 2 0 2 1 ĠExp edia , ĠInc Ċ Ġ* Ċ Ġ* Ġ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 Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġhttps :// 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 Ġcom . exp edi ag roup . graphql . plugin . client . generator . types Ċ Ċ import Ġcom . exp edi ag roup . graphql . plugin . client . generator . GraphQL Client Generator Context Ċ import Ġcom . squareup . kotlin po et . Fun Spec Ċ import Ġcom . squareup . kotlin po et . K Modifier Ċ import Ġcom . squareup . kotlin po et . Parameter Spec Ċ import Ġcom . squareup . kotlin po et . Property Spec Ċ import Ġcom . squareup . kotlin po et . Type Spec Ċ import Ġgraphql . language . Variable Definition Ċ Ċ /** Ċ Ġ* ĠGenerate Ġ[ Type Spec ] Ġdata Ġclass Ġwrapper Ġfor Ġvariables Ġused Ġwithin Ġthe Ġtarget Ġquery . Ċ Ġ*/ Ċ internal Ġfun Ġgenerate Variable Type Spec ( context : ĠGraphQL Client Generator Context , Ġvariable Definitions : ĠList < Variable Definition >): ĠType Spec ? Ġ{ ĊĠĠĠ Ġval Ġvariable Type Spec Ġ= ĠType Spec . class Builder (" Variables ") ĊĠĠĠĠĠĠĠ Ġ. add Modifiers ( K Modifier . DATA ) ĊĊĠĠĠ Ġval Ġconstructor Spec Ġ= ĠFun Spec . constructor Builder () ĊĠĠĠ Ġvariable Definitions . forEach Ġ{ Ġvariable Def Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġkotlin TypeName Ġ= Ġgenerate TypeName ( context , Ġvariable Def . type ) ĊĊĠĠĠĠĠĠĠ Ġval Ġparameter Builder Ġ= ĠParameter Spec . builder ( variable Def . name , Ġkotlin TypeName ) ĊĠĠĠĠĠĠĠ Ġif Ġ( kotlin TypeName . is Nullable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparameter Builder . defaultValue (" null ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġconstructor Spec . add Parameter ( parameter Builder . build ()) ĊĠĠĠĠĠĠĠ Ġvariable Type Spec . addProperty ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠProperty Spec . builder ( variable Def . name , Ġkotlin TypeName ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. initializer ( variable Def . name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġvariable Type Spec . primary Constructor ( constructor Spec . build ()) ĊĠĠĠ Ġreturn Ġif Ġ( variable Type Spec . property Specs . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġnull ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġvariable Type Spec . build () ĊĠĠĠ Ġ} Ċ } Ċ