/* Ċ Ġ* ĠCopyright Ġ 2 0 1 4 - 2 0 1 9 ĠJetBrains Ġs . r . o Ġand Ġcontributors . ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby Ġthe ĠApache Ġ 2 . 0 Ġlicense . Ċ Ġ*/ Ċ Ċ package Ġio . ktor . http Ċ Ċ import Ġio . ktor . util .* Ċ import Ġio . ktor . utils . io . char sets .* Ċ Ċ /** Ċ Ġ* ĠParse ĠURL Ġquery Ġparameters . ĠShould n 't Ġbe Ġused Ġfor Ġurl encoded Ġforms Ġbecause Ġof Ġ` + ` Ġcharacter . Ċ Ġ*/ Ċ fun ĠString . parse Url Encoded Parameters ( default Encoding : ĠCharset Ġ= ĠChar sets . UTF _ 8 , Ġlimit : ĠInt Ġ= Ġ 1 0 0 0 ): ĠParameters Ġ{ ĊĠĠĠ Ġval Ġparameters : ĠList < Pair < String , ĠString >> Ġ= ĊĠĠĠĠĠĠĠ Ġsplit ("& ", Ġlimit Ġ= Ġlimit ). map Ġ{ Ġit . substring Before (" =") Ġto Ġit . substring After (" =", Ġ"") Ġ} ĊĠĠĠ Ġval Ġencoding : ĠString Ġ= ĊĠĠĠĠĠĠĠ Ġparameters . first OrNull Ġ{ Ġit . first Ġ== Ġ"_ charset _" Ġ} ?. second Ġ?: Ġdefault Encoding . name ĊĊĠĠĠ Ġval Ġcharset Ġ= ĠCharset . forName ( encoding ) ĊĠĠĠ Ġreturn ĠParameters . build Ġ{ ĊĠĠĠĠĠĠĠ Ġparameters . forEach Ġ{ Ġ( key , Ġvalue ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkey . decode URL Query Component ( charset Ġ= Ġcharset ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue . decode URL Query Component ( charset Ġ= Ġcharset ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠEncode Ġform Ġparameters Ġfrom Ġa Ġlist Ġof Ġpairs Ċ Ġ*/ Ċ fun ĠList < Pair < String , ĠString ? >> . form Url Encode (): ĠString Ġ= ĠStringBuilder (). apply Ġ{ ĊĠĠĠ Ġform Url Encode To ( this ) Ċ }. toString () Ċ Ċ /** Ċ Ġ* ĠEncode Ġform Ġparameters Ġfrom Ġa Ġlist Ġof Ġpairs Ġto Ġthe Ġspecified Ġ[ out ] Ġappend able Ċ Ġ*/ Ċ fun ĠList < Pair < String , ĠString ? >> . form Url Encode To ( out : ĠAppend able ) Ġ{ ĊĠĠĠ Ġjoin To ( ĊĠĠĠĠĠĠĠ Ġout , Ġ"& " ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġkey Ġ= Ġit . first . encode URL Parameter ( space To Plus Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġif Ġ( it . second Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkey ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġit . second . toString (). encode URL Parameter ( space To Plus Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"$ key =$ value " ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠEncode Ġform Ġparameters Ċ Ġ*/ Ċ fun ĠParameters . form Url Encode (): ĠString Ġ= Ġentries () ĊĠĠĠ Ġ. flatMap Ġ{ Ġe Ġ-> Ġe . value . map Ġ{ Ġe . key Ġto Ġit Ġ} Ġ} ĊĠĠĠ Ġ. form Url Encode () Ċ Ċ /** Ċ Ġ* ĠEncode Ġform Ġparameters Ġto Ġthe Ġspecified Ġ[ out ] Ġappend able Ċ Ġ*/ Ċ fun ĠParameters . form Url Encode To ( out : ĠAppend able ) Ġ{ ĊĠĠĠ Ġentries () ĊĠĠĠĠĠĠĠ Ġ. flatMap Ġ{ Ġe Ġ-> Ġif Ġ( e . value . isEmpty ()) ĠlistOf ( e . key Ġto Ġnull ) Ġelse Ġe . value . map Ġ{ Ġe . key Ġto Ġit Ġ} Ġ} ĊĠĠĠĠĠĠĠ Ġ. form Url Encode To ( out ) Ċ } Ċ