package Ġorg . hy dev čĊč Ċ import Ġkotlinx . serialization . Implicit Reflection Serializer č Ċ import Ġkotlinx . serialization . json . Json č Ċ import Ġkotlinx . serialization . json . Json Configuration č Ċ import Ġkotlinx . serialization . serializer č Ċ import Ġkotlinx . serialization . stringify č Ċ import Ġkotlin . reflect . K Class čĊč Ċ /** čĊ Ġ* ĠAPI ĠNode Ġthat Ġprocesses ĠJson . čĊ Ġ* čĊ Ġ* Ġ@ author ĠHy DEV ĠTeam Ġ( https :// github . com / Hy Develop ) čĊ Ġ* Ġ@ author ĠH yk il pi kon na Ġ( https :// github . com / hy k il pi kon na ) čĊ Ġ* Ġ@ author ĠVan illa Ġ( https :// github . com / V erge DX ) čĊ Ġ* Ġ@ since Ġ 2 0 2 0 - 0 6 - 2 1 Ġ 1 5 : 1 9 čĊ Ġ*/ č Ċ abstract Ġclass ĠJson Api Node < T Ġ: ĠAny >( čĊĠĠĠ Ġpath : ĠString , čĊĠĠĠ Ġval Ġmodel Class : ĠK Class < T >, čĊĠĠĠ Ġis Secret : ĠBoolean Ġ= Ġfalse , čĊĠĠĠ Ġval ĠmaxLength : ĠInt Ġ= Ġ 1 0 0 0 0 , čĊĠĠĠ Ġval Ġparser : ĠJson Ġ= ĠJson ( Json Configuration . Stable ) č Ċ ) Ġ: ĠApi Node ( path , Ġis Secret ) Ġ{ čĊĠĠĠ Ġ/** čĊĠĠĠĠ Ġ* ĠProcess Ġhttp Ġnode Ġaccess Ġto Ġcheck Ġfor Ġstuff Ġand Ġparse Ġjson . čĊĠĠĠĠ Ġ* čĊĠĠĠĠ Ġ* Ġ@ param Ġaccess ĠHttp Ġnode Ġaccess čĊĠĠĠĠ Ġ* Ġ@ return ĠData Ġsent Ġback Ġto Ġthe Ġuser čĊĠĠĠĠ Ġ*/ čĊĠĠĠ Ġ@ Implicit Reflection Serializer čĊĠĠĠ Ġoverride Ġfun Ġprocess ( access : ĠApi Access ): ĠAny Ġ{ čĊĠĠĠĠĠĠĠ Ġ// ĠValidate Ġbody čĊĠĠĠĠĠĠĠ Ġif Ġ( access . body . isEmpty ()) Ġreturn Ġjson Error (" Request Ġbody Ġis Ġempty .") čĊĠĠĠĠĠĠĠ Ġif Ġ( access . body . length Ġ> ĠmaxLength ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠKnown Exception (" Body Ġtoo Ġlong . Ġ(${ access . body . length }/ $ maxLength )") čĊĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠ Ġ// ĠParse Ġbody Ġas Ġjson čĊĠĠĠĠĠĠĠ Ġval Ġdata : ĠT čĊĠĠĠĠĠĠĠ Ġtry Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata Ġ= Ġparser . parse ( model Class . serializer (), Ġaccess . body ) čĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġmsg Ġ= Ġ" Error Ġduring Ġjson Ġparsing : Ġ${ e . message }" čĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! is Secret ) Ġmsg Ġ+= Ġ" Ġfor Ġ${ access . body }" čĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠKnown Exception ( msg ) čĊĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠ Ġ// ĠGet Ġand Ġreturn Ġprocessed Ġresults čĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġjson ( access , Ġdata ) čĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( result . is Primitive ()) Ġresult Ġelse Ġparser . stringify ( result ) čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġabstract Ġfun Ġjson ( access : ĠApi Access , Ġdata : ĠT ): ĠAny č Ċ } čĊ