package Ġkr . j ade kim . k roto . http . fuel Ċ Ċ import Ġcom . github . kit tin un f . fuel . core .* Ċ import Ġkotlinx . serialization . Deserialization Strategy Ċ import Ġkotlinx . serialization . json . content OrNull Ċ import Ġkotlinx . serialization . json . jsonObject Ċ import Ġkotlinx . serialization . json . json Primitive Ċ import Ġkr . j ade kim . k roto . http . Http EndPoint Ċ import Ġkr . j ade kim . k roto . http . HttpMethod Ċ import Ġkr . j ade kim . k roto . http . K roto Http Json Ċ import Ġjava . io . InputStream Ċ import Ġjava . io . Reader Ċ Ċ class ĠF uel Client ( ĊĠĠĠ Ġval Ġbase EndPoint : ĠString , ĊĠĠĠ Ġconfigure : ĠF uel Manager . () Ġ-> ĠUnit Ġ= Ġ{} Ċ ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġfuel Manager Ġ= ĠF uel Manager () ĊĠĠĠĠĠĠĠ Ġ. apply ( configure ) ĊĊĠĠĠ Ġprivate Ġval Ġfuel Ġ= Ġfuel Manager Ġas ĠRequest Factory . Con venience ĊĊĠĠĠ Ġprivate Ġval ĠHttpMethod . fuel Type ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġwhen Ġ( this ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠHttpMethod . GET Ġ-> ĠMethod . GET ĊĠĠĠĠĠĠĠĠĠĠĠ ĠHttpMethod . POST Ġ-> ĠMethod . POST ĊĠĠĠĠĠĠĠĠĠĠĠ ĠHttpMethod . PUT Ġ-> ĠMethod . PUT ĊĠĠĠĠĠĠĠĠĠĠĠ ĠHttpMethod . PATCH Ġ-> ĠMethod . PATCH ĊĠĠĠĠĠĠĠĠĠĠĠ ĠHttpMethod . DELETE Ġ-> ĠMethod . DELETE ĊĠĠĠĠĠĠĠĠĠĠĠ ĠHttpMethod . HEAD Ġ-> ĠMethod . HEAD ĊĠĠĠĠĠĠĠĠĠĠĠ ĠHttpMethod . OPTIONS Ġ-> ĠMethod . OPTIONS ĊĠĠĠĠĠĠĠĠĠĠĠ ĠHttpMethod . TRACE Ġ-> ĠMethod . TRACE ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġ< P Ġ: ĠAny , ĠQ Ġ: ĠAny , ĠR q Ġ: ĠAny , ĠRs Ġ: ĠAny > Ġrequest ( ĊĠĠĠĠĠĠĠ Ġend Point : ĠHttp EndPoint < P , ĠQ , ĠR q , ĠRs >, ĊĠĠĠĠĠĠĠ Ġpath Parameter : ĠP ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġquery : ĠQ ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġbody : ĠR q ? Ġ= Ġnull ĊĠĠĠ Ġ): ĠTrip le < Request , ĠResponse , ĠRs > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġquery Parameter Ġ= Ġquery ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠK roto Http Json . encode ToJson Element ( end Point . query Parameter Serializer , Ġit ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. jsonObject . toList () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġq Ġ-> Ġq . first Ġto Ġq . second . json Primitive . content OrNull Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġrequest Body Ġ= Ġbody ?. let Ġ{ ĠK roto Http Json . encode ToString ( end Point . request Body Serializer , Ġit ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġvar Ġrequest Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfuel . request ( end Point . method . fuel Type , Ġbase EndPoint Ġ+ Ġend Point . getPath ( path Parameter ), Ġquery Parameter ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. header ( Headers . CONTENT _ TYPE , Ġ" application / json ") ĊĊĠĠĠĠĠĠĠ Ġif Ġ( request Body Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Ġ= Ġrequest . body ( request Body ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġrequest . await Response ( Deserial izable ( end Point . response Body Serializer )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġclass ĠDeserial izable < T Ġ: ĠAny >( private Ġval Ġserializer : ĠDeserial ization Strategy < T >) Ġ: ĊĠĠĠĠĠĠĠ ĠResponse Deserial izable < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġdeserialize ( content : ĠString ): ĠT ? Ġ= ĠK roto Http Json . decode FromString ( serializer , Ġcontent ) ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġdeserialize ( reader : ĠReader ): ĠT ? Ġ= Ġdeserialize ( reader . read Text ()) ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġdeserialize ( bytes : ĠByteArray ): ĠT ? Ġ= Ġdeserialize ( String ( bytes )) ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġdeserialize ( inputStream : ĠInputStream ): ĠT ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠinputStream . buffered Reader (). use Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġdeserialize ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }