package Ġdev . edu ay uso . kol ib s . kon et . impl Ċ Ċ import Ġdev . edu ay uso . kol ib s . kon et . IK o HttpRequest Ċ import Ġdev . edu ay uso . kol ib s . kon et . IK o Rest Consumer Ċ import Ġio . ktor . client . request . HttpRequest Builder Ċ import Ġio . ktor . client . utils . Empty Content Ċ import Ġio . ktor . content .* Ċ import Ġio . ktor . http . ContentType Ċ import Ġio . ktor . http . HttpMethod Ċ import Ġio . ktor . http . take From Ċ import Ġkotlinx . serialization . K Serializer Ċ import Ġkotlinx . serialization . json . Json Ċ Ċ class ĠKo Rest Consumer ( ĊĠĠĠ Ġapi : ĠKo ApiClient , ĊĠĠĠ Ġresource Path : ĠString Ċ Ċ ): ĠIK o Rest Consumer Ġ{ ĊĊĠĠĠ Ġoverride Ġval ĠbaseUrl Ġ= Ġapi . baseUrl ĊĠĠĠ Ġoverride Ġval Ġresource Path Ġ= Ġresource Path ĊĠĠĠ Ġoverride Ġval ĠhttpClient Ġ= Ġapi . httpClient ĊĠĠĠ Ġoverride Ġval Ġhttp Headers Ġ= Ġapi . getHeaders () ĊĠĠĠ Ġoverride Ġval Ġjson Ġ= Ġapi . json ĊĊĠĠĠ Ġfun Ġget (): ĠIK o HttpRequest Ġ{ ĊĊĠĠĠĠĠĠĠ Ġreturn Ġthis . build Request ( HttpMethod . Get , Ġthis . resource Path , ĠEmpty Content ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget ( id : Int ): ĠIK o HttpRequest Ġ{ ĊĊĠĠĠĠĠĠĠ Ġreturn Ġthis . build Request ( HttpMethod . Get , Ġ"${ this . resource Path }/ $ id ", ĠEmpty Content ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġ< T > Ġpost ( body : T , Ġserial izable : ĠK Serializer < T >): ĠIK o HttpRequest Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġrequest Body Ġ= Ġthis . build RequestBody ( body , Ġserial izable ) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis . build Request ( HttpMethod . Post , Ġthis . resource Path , Ġrequest Body ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġ< T > Ġput ( id : ĠInt , Ġbody : ĠT , Ġserial izable : ĠK Serializer < T >): ĠIK o HttpRequest Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġrequest Body Ġ= Ġthis . build RequestBody ( body , Ġserial izable ) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis . build Request ( HttpMethod . Put , Ġ"${ this . resource Path }/ $ id ", Ġrequest Body ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġ< T > Ġput ( body : ĠT , Ġserial izable : ĠK Serializer < T >): ĠIK o HttpRequest Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġrequest Body Ġ= Ġthis . build RequestBody ( body , Ġserial izable ) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis . build Request ( HttpMethod . Put , Ġresource Path , Ġrequest Body ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġ< T > Ġpatch ( id : ĠInt , Ġbody : ĠT , Ġserial izable : ĠK Serializer < T >): ĠIK o HttpRequest Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġrequest Body Ġ= Ġthis . build RequestBody ( body , Ġserial izable ) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis . build Request ( HttpMethod . Patch , Ġ"${ this . resource Path }/ $ id ", Ġrequest Body ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġ< T > Ġdelete ( body : ĠT , Ġserial izable : ĠK Serializer < T >): ĠIK o HttpRequest Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġrequest Body Ġ= Ġthis . build RequestBody ( body , Ġserial izable ) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis . build Request ( HttpMethod . Delete , Ġthis . resource Path , Ġrequest Body ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdelete ( id : Int ): ĠIK o HttpRequest Ġ{ ĊĊĠĠĠĠĠĠĠ Ġreturn Ġthis . build Request ( HttpMethod . Delete , Ġ"${ this . resource Path }/ $ id ", ĠEmpty Content ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġ< T > Ġbuild RequestBody ( body : ĠT , Ġserial izable : ĠK Serializer < T >): ĠText Content Ġ= ĊĊĠĠĠĠĠĠĠ ĠText Content ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjson . encode ToString ( serial izable , Ġbody ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠContentType . Application . Json . without Parameters () ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠ Ġprivate Ġfun Ġbuild Request ( method : HttpMethod , Ġpath : String , Ġbody : ĠAny ): ĠIK o HttpRequest Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= ĠHttpRequest Builder () ĊĠĠĠĠĠĠĠ Ġbuilder . method Ġ= Ġmethod ĊĠĠĠĠĠĠĠ Ġbuilder . body Ġ= Ġbody ĊĠĠĠĠĠĠĠ Ġbuilder . url Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtake From ( baseUrl ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġencoded Path Ġ= Ġencoded Path . let Ġ{ Ġstarting Path Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpath ( path ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ let Ġstarting Path Ġ+ Ġencoded Path . substring ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġwith ( builder . headers ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhttp Headers . map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend ( it . key , Ġit . value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn ĠKo HttpRequest ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . httpClient , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . json ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ }