/* Ċ Ġ* ĠCopyright ĠAmazon . com , ĠInc . Ġor Ġits Ġaffiliates . ĠAll ĠRights ĠReserved . Ċ Ġ* ĠSPDX - License - Identifier : ĠApache - 2 . 0 . Ċ Ġ*/ Ċ package Ġaws . smithy . kotlin . runtime . http . request Ċ Ċ import Ġaws . smithy . kotlin . runtime . http .* Ċ import Ġaws . smithy . kotlin . runtime . http . content . ByteArray Content Ċ import Ġaws . smithy . kotlin . runtime . http . util . Can DeepCopy Ċ import Ġaws . smithy . kotlin . runtime . io .* Ċ import Ġaws . smithy . kotlin . runtime . util . Internal Api Ċ Ċ /** Ċ Ġ* ĠUsed Ġto Ġconstruct Ġan ĠHTTP Ġrequest Ċ Ġ* Ġ@ param Ġmethod ĠThe ĠHTTP Ġmethod Ġ( verb ) Ġto Ġuse Ġwhen Ġmaking Ġthe Ġrequest Ċ Ġ* Ġ@ param Ġurl ĠEndpoint Ġto Ġmake Ġrequest Ġto Ċ Ġ* Ġ@ param Ġheaders ĠHTTP Ġheaders Ċ Ġ* Ġ@ param Ġbody ĠOut going Ġpayload . ĠInit ially Ġempty Ċ Ġ*/ Ċ class ĠHttpRequest Builder Ġprivate Ġconstructor ( ĊĠĠĠ Ġvar Ġmethod : ĠHttpMethod , ĊĠĠĠ Ġval Ġurl : ĠUrl Builder , ĊĠĠĠ Ġval Ġheaders : ĠHeaders Builder , ĊĠĠĠ Ġvar Ġbody : ĠHttp Body , Ċ ) Ġ: ĠCan DeepCopy < HttpRequest Builder > Ġ{ ĊĠĠĠ Ġconstructor () Ġ: Ġthis ( HttpMethod . GET , ĠUrl Builder (), ĠHeaders Builder (), ĠHttp Body . Empty ) ĊĊĠĠĠ Ġfun Ġbuild (): ĠHttpRequest Ġ= ĠHttpRequest ( method , Ġurl . build (), Ġif Ġ( headers . isEmpty ()) ĠHeaders . Empty Ġelse Ġheaders . build (), Ġbody ) ĊĊĠĠĠ Ġoverride Ġfun Ġdeep Copy (): ĠHttpRequest Builder Ġ= ĊĠĠĠĠĠĠĠ ĠHttpRequest Builder ( method , Ġurl . deep Copy (), Ġheaders . deep Copy (), Ġbody ) ĊĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ= Ġbuild String Ġ{ ĊĠĠĠĠĠĠĠ Ġappend (" HttpRequest Builder ( method =$ method , Ġurl =$ url , Ġheaders =$ headers , Ġbody =$ body )") ĊĠĠĠ Ġ} Ċ } Ċ Ċ // Ġconvenience Ġextensions Ċ Ċ /** Ċ Ġ* ĠModify Ġthe ĠURL Ġinside Ġthe Ġblock Ċ Ġ*/ Ċ fun ĠHttpRequest Builder . url ( block : ĠUrl Builder . () Ġ-> ĠUnit ) Ġ= Ġurl . apply ( block ) Ċ Ċ /** Ċ Ġ* ĠSet Ġvalues Ġfrom Ġan Ġexisting Ġ[ Url ] Ġinstance Ċ Ġ*/ Ċ fun ĠHttpRequest Builder . url ( value : ĠUrl ) Ġ= Ġurl . apply Ġ{ ĊĠĠĠ Ġscheme Ġ= Ġvalue . scheme ĊĠĠĠ Ġhost Ġ= Ġvalue . host ĊĠĠĠ Ġport Ġ= Ġvalue . port ĊĠĠĠ Ġpath Ġ= Ġvalue . path ĊĠĠĠ Ġparameters . append All ( value . parameters ) ĊĠĠĠ Ġfragment Ġ= Ġvalue . fragment ĊĠĠĠ ĠuserInfo Ġ= Ġvalue . userInfo ĊĠĠĠ Ġforce Query Ġ= Ġvalue . force Query Ċ } Ċ Ċ /** Ċ Ġ* ĠModify Ġthe Ġheaders Ġinside Ġthe Ġgiven Ġblock Ċ Ġ*/ Ċ fun ĠHttpRequest Builder . headers ( block : ĠHeaders Builder . () Ġ-> ĠUnit ) Ġ= Ġheaders . apply ( block ) Ċ Ċ /** Ċ Ġ* ĠAdd Ġa Ġsingle Ġheader . ĠThis Ġwill Ġappend Ġto Ġany Ġexisting Ġheaders Ġwith Ġthe Ġsame Ġname . Ċ Ġ*/ Ċ fun ĠHttpRequest Builder . header ( name : ĠString , Ġvalue : ĠString ) Ġ= Ġheaders . append ( name , Ġvalue ) Ċ Ċ /** Ċ Ġ* ĠDump Ġa Ġdebug Ġdescription Ġof Ġthe Ġrequest Ċ Ġ* Ċ Ġ* Ġ@ param Ġdump Body ĠFlag Ġcontrolling Ġwhether Ġto Ġalso Ġdump Ġthe Ġbody Ġout . ĠIf Ġtrue Ġthe Ġbody Ġwill Ġbe Ġconsumed Ġand Ċ Ġ* Ġreplaced . Ċ Ġ*/ Ċ @ Internal Api Ċ suspend Ġfun Ġdump Request ( request : ĠHttpRequest Builder , Ġdump Body : ĠBoolean ): ĠString Ġ{ ĊĠĠĠ Ġval Ġbuffer Ġ= ĠS dk ByteBuffer ( 2 5 6 u ) ĊĊĠĠĠ Ġ// ĠTODO Ġ- Ġwe Ġhave Ġno Ġway Ġto Ġknow Ġthe Ġhttp Ġversion Ġat Ġthis Ġlevel Ġto Ġset ĠHTTP / x . x ĊĠĠĠ Ġbuffer . write ("${ request . method } Ġ${ request . url . encoded Path }\ r \ n ") ĊĠĠĠ Ġbuffer . write (" Host : Ġ${ request . url . host }\ r \ n ") ĊĊĠĠĠ Ġval Ġcontent Length Ġ= Ġrequest . headers [" Content - Length "] ?. to Long OrNull () Ġ?: Ġ( request . body . content Length Ġ?: Ġ 0 ) ĊĠĠĠ Ġif Ġ( content Length Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbuffer . write (" Content - Length : Ġ$ content Length \ r \ n ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġskip Ġ= Ġset Of (" Host ", Ġ" Content - Length ") ĊĠĠĠ Ġrequest . headers . entries () ĊĠĠĠĠĠĠĠ Ġ. filter Not Ġ{ Ġit . key Ġin Ġskip Ġ} ĊĠĠĠĠĠĠĠ Ġ. forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuffer . write ( it . value . join ToString ( separator Ġ= Ġ"; ", Ġprefix Ġ= Ġ"${ it . key }: Ġ", Ġpostfix Ġ= Ġ"\ r \ n ")) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġbuffer . write ("\ r \ n ") ĊĊĠĠĠ Ġif Ġ( dump Body ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( val Ġbody Ġ= Ġrequest . body ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠHttp Body . Bytes Ġ-> Ġbuffer . write Fully ( body . bytes ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠHttp Body . Streaming Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġconsume Ġthe Ġstream Ġand Ġreplace Ġthe Ġbody ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontent Ġ= Ġbody . read All () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( content Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuffer . write Fully ( content ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest . body Ġ= ĠByteArray Content ( content ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠHttp Body . Empty Ġ-> Ġ{ Ġ} Ġ// Ġnothing Ġto Ġdump ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn Ġbuffer . decode ToString () Ċ } Ċ