package Ġcom . deck . rest . util Ċ Ċ import Ġcom . deck . common . util . Constants Ċ import Ġcom . deck . rest . RestClient Ċ import Ġio . ktor . client .* Ċ import Ġio . ktor . client . engine . c io .* Ċ import Ġio . ktor . client . features . json .* Ċ import Ġio . ktor . client . features . json . serializer .* Ċ import Ġio . ktor . client . statement .* Ċ import Ġio . ktor . http .* Ċ Ċ public Ġabstract Ġclass ĠRoute ( public Ġval Ġclient : ĠRest Client ) Ġ{ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThis Ġwill Ġfire Ġa Ġrequest Ġand Ġthrow Ġan Ġ[ Gu il ded RequestException ] Ġin Ġcase Ġof Ġfailure . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param ĠR ĠResponse Ġtype Ġ( Special Ġtypes : Ġ[ Unit ], Ġ[ HttpResponse ]) ĊĠĠĠĠ Ġ* Ġ@ param ĠB ĠBody Ġtype ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġendpoint ĠThe Ġrequest Ġendpoint Ġ( not Ġthe Ġentire Ġurl ) ĊĠĠĠĠ Ġ* Ġ@ param Ġmethod ĠThe Ġrequest Ġhttp Ġmethod ĊĠĠĠĠ Ġ* Ġ@ param Ġbody ĠRequest Ġbody , Ġnull Ġif Ġempty ĊĠĠĠĠ Ġ* Ġ@ param Ġauthenticated ĠWhether Ġyou Ġneed Ġto Ġprovide Ġan Ġauthentication Ġfor Ġthis Ġrequest ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ throws ĠGu il ded RequestException Ġin Ġcase Ġof Ġfailure . ĊĠĠĠĠ Ġ* Ġ@ return ĠReturns Ġan Ġobject Ġof Ġtype Ġ[ R ] Ġin Ġcase Ġof Ġsuccess . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġpublic Ġsuspend Ġinline Ġfun Ġ< re ified ĠR , Ġre ified ĠB > Ġsend Request ( ĊĠĠĠĠĠĠĠ Ġendpoint : ĠString , ĊĠĠĠĠĠĠĠ Ġmethod : ĠHttpMethod , ĊĠĠĠĠĠĠĠ Ġbody : ĠB ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġauthenticated : ĠBoolean Ġ= Ġtrue ĊĠĠĠ Ġ): ĠR Ġ= Ġclient . request Service . send Request ( ĊĠĠĠĠĠĠĠ ĠRequest ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmethod , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠConstants . Gu il ded RestApi Ġ+ Ġendpoint , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbody , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( authenticated ) Ġclient . token Ġelse Ġnull ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThis Ġwill Ġfire Ġa Ġrequest Ġand Ġreturn Ġnull Ġin Ġcase Ġof Ġfailure . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param ĠR ĠResponse Ġtype Ġ( Special Ġtypes : Ġ[ Unit ], Ġ[ HttpResponse ]) ĊĠĠĠĠ Ġ* Ġ@ param ĠB ĠBody Ġtype ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġendpoint ĠThe Ġrequest Ġendpoint Ġ( not Ġthe Ġentire Ġurl ) ĊĠĠĠĠ Ġ* Ġ@ param Ġmethod ĠThe Ġrequest Ġhttp Ġmethod ĊĠĠĠĠ Ġ* Ġ@ param Ġbody ĠRequest Ġbody , Ġnull Ġif Ġempty ĊĠĠĠĠ Ġ* Ġ@ param Ġauthenticated ĠWhether Ġyou Ġneed Ġto Ġprovide Ġan Ġauthentication Ġfor Ġthis Ġrequest ĊĠĠĠĠ Ġ* Ġ@ return ĠNull Ġin Ġcase Ġof Ġfailure , Ġ[ R ] Ġin Ġcase Ġof Ġsuccess ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġpublic Ġsuspend Ġinline Ġfun Ġ< re ified ĠR , Ġre ified ĠB > Ġsend Nullable Request ( ĊĠĠĠĠĠĠĠ Ġendpoint : ĠString , ĊĠĠĠĠĠĠĠ Ġmethod : ĠHttpMethod , ĊĠĠĠĠĠĠĠ Ġbody : ĠB ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġauthenticated : ĠBoolean Ġ= Ġtrue ĊĠĠĠ Ġ): ĠR ? Ġ= Ġclient . request Service . send Nullable Request ( ĊĠĠĠĠĠĠĠ ĠRequest < B , ĠR >( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmethod , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠConstants . Gu il ded RestApi Ġ+ Ġendpoint , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbody , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( authenticated ) Ġclient . token Ġelse Ġnull ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ) Ċ } Ċ Ċ internal Ġval ĠDEFAULT _ HTTP _ CLIENT Ġ= ĠHttpClient ( C IO . create ()) Ġ{ ĊĠĠĠ Ġinstall ( Json Feature ) Ġ{ ĊĠĠĠĠĠĠĠ Ġserializer Ġ= ĠKotlin x Serializer ( kotlin x . serialization . json . Json Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġencode Defaults Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġignore Unknown Keys Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġaccept Content Types Ġ= Ġaccept Content Types Ġ+ ĠContentType (" application ", Ġ" json ") ĊĠĠĠ Ġ} ĊĠĠĠ Ġexpect Success Ġ= Ġfalse Ċ }