package Ġio . black mo 1 8 . kotlin . gr ass . pot Ċ Ċ import Ġkotlinx . coroutines . flow . Flow Ċ import Ġkotlinx . coroutines . flow . map Ċ import Ġkotlin . reflect . K Class Ċ import Ġkotlin . reflect . K Property Ċ Ċ /** Ċ Ġ* ĠImplementation Ġ** class ** Ġof Ġ[ Root ] ĠConversion ĠEngine Ġfrom Ġcsv Ġcontents Ġto Ġ** data Ġclass ** Ġdefinition Ċ Ġ* Ġ@ param Ġtype Ġdata Ġ** class ** Ġdefinition Ċ Ġ* Ġ@ param Ġtrim Ġremoves Ġwhite Ġspaces Ġdefined Ġwithin Ġcsv Ġcolumn Ġentry Ċ Ġ* Ġ@ param Ġcase Sensitive Ġcase Ġsensitive Ġheader Ġmatching Ċ Ġ* Ġ@ param Ġignore UnknownFields Ġignores Ġunknown Ġfields Ċ Ġ* Ġ@ param Ġreceived Key Map Ġcustom Ġuser Ġdefined Ġkey Ġmapping Ġvalues Ċ Ġ* Ġ@ author Ġblack mo 1 8 Ċ Ġ*/ Ċ @ Suppress (" UN CHECK ED _ CAST ") Ċ @ Experimental Std lib Api Ċ actual Ġopen Ġclass ĠSt em < out ĠT > Ġactual Ġconstructor ( ĊĠĠĠ Ġtype : ĠK Class <* >, ĊĠĠĠ Ġtrim : ĠBoolean , ĊĠĠĠ Ġignore UnknownFields : ĠBoolean , ĊĠĠĠ Ġprivate Ġval Ġcase Sensitive : ĠBoolean , ĊĠĠĠ Ġprivate Ġval Ġreceived Key Map : ĠMap < String , ĠString > ?, ĊĠĠĠ Ġprivate Ġval Ġreceived Key Map Data Property : ĠMap < String , ĠK Property <* >> ? Ċ ): ĠRoot < T >( type , Ġtrim , Ġignore UnknownFields , Ġcase Sensitive ) Ġ{ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ return Ġconverted Ġsequence Ġof Ġdata Ġ[ T ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġactual Ġfun Ġhar vest Data ( seed : ĠSequence < Map < String , ĠString >> ): ĠSequence < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġinit On Method () ĊĠĠĠĠĠĠĠ Ġval Ġconstructor Ġ= Ġtype . construct ors . first () ĊĠĠĠĠĠĠĠ Ġreturn Ġsequence Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġseed . forEach Ġ{ Ġentry Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparams Ġ= Ġcreate Object ( entry ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġobj Ġ= Ġconstructor . call (* params ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġyield ( obj Ġas ĠT ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ return Ġconverted Ġlist Ġof Ġdata Ġ[ T ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġactual Ġfun Ġhar vest Data ( seed : ĠList < Map < String , ĠString >> ): ĠList < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġinit On Method () ĊĠĠĠĠĠĠĠ Ġval Ġconstructor Ġ= Ġtype . construct ors . first () ĊĠĠĠĠĠĠĠ Ġreturn Ġseed . map Ġ{ Ġentry Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparams Ġ= Ġcreate Object ( entry ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconstructor . call (* params ) Ġas ĠT ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġactual Ġsuspend Ġfun Ġhar vest Data ( seed : ĠFlow < Map < String , ĠString >> ): ĠFlow < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġinit On Method () ĊĠĠĠĠĠĠĠ Ġval Ġconstructor Ġ= Ġtype . construct ors . first () ĊĠĠĠĠĠĠĠ Ġreturn Ġseed . map Ġ{ Ġentry Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparams Ġ= Ġcreate Object ( entry ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconstructor . call (* params ) Ġas ĠT ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit On Method () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( case Sensitive ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Case Sensitive () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Not Case Sensitive () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġon Case Sensitive () Ġ{ ĊĠĠĠĠĠĠĠ Ġtype . construct ors . first (). parameters . forEach Ġ{ Ġk Param Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparam N Types [ k Param . name ] Ġ= ĠgetType ( k Param . type ) Ġas Ġ(( String ) Ġ-> ĠAny )? ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparam N Index [ k Param . name ] Ġ= Ġk Param . index ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! received Key Map . isNull OrEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreceived Key Map . let Ġ{ Ġpair Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcustom Key Map . put All ( pair ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreceived Key Map Data Property ?. forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcustom Key Map [ it . key ] Ġ= Ġit . value . name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġon Not Case Sensitive () Ġ{ ĊĠĠĠĠĠĠĠ Ġtype . construct ors . first (). parameters . forEach Ġ{ Ġk Param Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparam N Types [ k Param . name ?. toUpperCase ()] Ġ= ĠgetType ( k Param . type ) Ġas Ġ(( String ) Ġ-> ĠAny )? ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparam N Index [ k Param . name ?. toUpperCase ()] Ġ= Ġk Param . index ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! received Key Map . isNull OrEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreceived Key Map . let Ġ{ Ġpair Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpair . forEach Ġ{ Ġ( key , Ġvalue ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcustom Key Map [ key . toUpperCase ()] Ġ= Ġvalue . toUpperCase () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreceived Key Map Data Property ?. forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcustom Key Map [ it . key . toUpperCase ()] Ġ= Ġit . value . name . toUpperCase () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ