@ file : Suppress (" UN CHECK ED _ CAST ") Ċ Ċ package Ġio . k amel . core . utils Ċ Ċ import Ġio . k amel . core . config . K amel Config Ċ import Ġio . k amel . core . decoder . Decoder Ċ import Ġio . k amel . core . fetcher . Fetcher Ċ import Ġkotlin . reflect . full . create Type Ċ import Ġkotlin . reflect . full . is Subtype Of Ċ import Ġkotlin . reflect . full . is Sup ertype Of Ċ import Ġkotlin . reflect . type Of Ċ Ċ internal Ġactual Ġfun Ġ< T Ġ: ĠAny > ĠK amel Config . find Fetcher For ( data : ĠT ): ĠFetch er < T > Ġ{ ĊĊĠĠĠ Ġval Ġtype Ġ= Ġdata :: class . create Type () ĊĊĠĠĠ Ġval Ġfetch er Ġ= Ġfetch ers . find Last Ġ{ Ġfetch er Ġ-> ĊĊĠĠĠĠĠĠĠ Ġval Ġfetch er Type Ġ= Ġfetch er :: class . sup ert ypes ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. first OrNull () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ? . arguments ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ? . first OrNull () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ? . type Ġ?: Ġerror (" Unable Ġto Ġfind Ġtype Ġfor Ġ$ fetcher ") ĊĊĠĠĠĠĠĠĠ Ġval Ġis Same Type Ġ= Ġfetch er Type . is Sup ertype Of ( type ) Ġ|| Ġfetch er Type . is Subtype Of ( type ) ĊĊĠĠĠĠĠĠĠ Ġis Same Type Ġ&& Ġwith ( fetcher ) Ġ{ Ġdata . is Supported Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ ĠcheckNotNull ( fetcher ) Ġ{ Ġ" Unable Ġto Ġfind Ġa Ġfetch er Ġfor Ġ$ type " Ġ} ĊĊĠĠĠ Ġreturn Ġfetch er Ġas ĠFetch er < T > Ċ } Ċ Ċ @ Opt In ( Experimental Std lib Api :: class ) Ċ internal Ġactual Ġinline Ġfun Ġ< re ified ĠT Ġ: ĠAny > ĠK amel Config . find Decoder For (): ĠDecoder < T > Ġ{ ĊĊĠĠĠ Ġval Ġtype Ġ= ĠtypeOf < Decoder < T >>() ĊĊĠĠĠ Ġval Ġdecoder Ġ= Ġde coders . find Last Ġ{ Ġdecoder Ġ-> ĊĊĠĠĠĠĠĠĠ Ġval Ġdecoder Type Ġ= Ġdecoder :: class . create Type () ĊĊĠĠĠĠĠĠĠ Ġdecoder Type . is Sup ertype Of ( type ) Ġ|| Ġdecoder Type . is Subtype Of ( type ) ĊĠĠĠ Ġ} ĊĊĠĠĠ ĠcheckNotNull ( decoder ) Ġ{ Ġ" Unable Ġto Ġfind Ġa Ġdecoder Ġfor Ġ$ type " Ġ} ĊĊĠĠĠ Ġreturn Ġdecoder Ġas ĠDecoder < T > Ċ } Ċ