/* Ċ Ġ* ĠCopyright Ġ 2 0 1 4 - 2 0 2 2 ĠJetBrains Ġs . r . o Ġand Ġcontributors . ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby Ġthe ĠApache Ġ 2 . 0 Ġlicense . Ċ Ġ*/ Ċ Ċ package Ġio . ktor . server . plugins . content neg otiation Ċ Ċ import Ġio . ktor . http .* Ċ import Ġio . ktor . serialization .* Ċ import Ġio . ktor . server . application .* Ċ import Ġio . ktor . server . plugins .* Ċ import Ġio . ktor . server . request .* Ċ import Ġio . ktor . utils . io .* Ċ import Ġio . ktor . utils . io . char sets .* Ċ Ċ internal Ġfun ĠPlugin Builder < Content Neg otiation Config >. convert RequestBody () Ġ{ ĊĠĠĠ Ġon Call Receive Ġ{ Ġcall Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġregist rations Ġ= Ġplugin Config . regist rations ĊĠĠĠĠĠĠĠ Ġval Ġrequested Type Ġ= Ġcall . receive Type ĊĊĠĠĠĠĠĠĠ Ġif Ġ( requested Type . type Ġ== ĠByte Read Channel :: class ) Ġreturn @ on Call Receive ĊĊĠĠĠĠĠĠĠ Ġtransform Body Ġ{ Ġbody : ĠByte Read Channel Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrequest ContentType Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcall . request . contentType (). without Parameters () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( parse Failure : ĠBad ContentType FormatException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠBadRequest Exception ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Illegal ĠContent - Type Ġheader Ġformat : Ġ${ call . request . headers [ HttpHeaders . ContentType ] }", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparse Failure ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsuitable Converters Ġ= Ġregist rations ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġconverter Ġ-> Ġrequest ContentType . match ( converter . contentType ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. take If Ġ{ Ġit . isNotEmpty () Ġ} Ġ?: Ġreturn @ transform Body Ġbody ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġconverted Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠPick Ġthe Ġfirst Ġone Ġthat Ġcan Ġconvert Ġthe Ġsubject Ġsuccessfully ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuitable Converters . first NotNull Of OrNull Ġ{ Ġregistration Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġregistration . converter . deserialize ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcharset Ġ= Ġcall . request . content Charset () Ġ?: ĠChar sets . UTF _ 8 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype Info Ġ= Ġrequested Type , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Ġ= Ġbody ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ?: Ġreturn @ transform Body Ġbody ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( convert Exception : ĠContent Convert Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠBadRequest Exception ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconvert Exception . message Ġ?: Ġ" Can 't Ġconvert Ġparameters ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconvert Exception . cause ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ transform Body Ġconverted ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ