package Ġjp . ass as ans . prot ank i . server . commands Ċ Ċ import Ġkotlin . reflect .* Ċ import Ġcom . squareup . mos hi . M oshi Ċ import Ġorg . k oin . java . K oin Java Component Ċ Ċ data Ġclass ĠCommand Handler Description ( ĊĠ Ġval Ġtype : ĠK Class < out ĠICommand Handler >, ĊĠ Ġval Ġfunction : ĠK Function <* >, ĊĠ Ġval Ġname : ĠCommand Name , ĊĠ Ġvar Ġargs Behaviour : ĠArgs Behaviour Type , ĊĠ Ġval Ġargs : ĠList < K Parameter > Ċ ) Ċ Ċ class ĠCommand Args ( var Ġraw Args : ĠList < String >) Ġ{ ĊĠ Ġ@ Opt In ( Experimental Std lib Api :: class ) ĊĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠ Ġfun Ġconvert ( type : ĠK Type , Ġvalue : ĠString ): ĠAny ? Ġ{ ĊĠĠĠĠĠ Ġreturn Ġwhen ( type . java Type ) Ġ{ ĊĠĠĠĠĠĠĠ ĠString :: class . java Ġ-> Ġvalue ĊĠĠĠĠĠĠĠ ĠInt :: class . java ĠĠĠ Ġ-> Ġvalue . toInt () ĊĠĠĠĠĠĠĠ ĠDouble :: class . java Ġ-> Ġvalue . toDouble () ĊĠĠĠĠĠĠĠ ĠBoolean :: class . java Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġif ( value . equals (" false ", Ġignore Case Ġ= Ġtrue )) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠ Ġif ( value . equals (" true ", Ġignore Case Ġ= Ġtrue )) Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠ Ġthrow ĠException (" Invalid ĠBoolean Ġvalue : Ġ$ value ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġelse ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġval Ġjson Ġ= ĠK oin Java Component . inject < M oshi >( M oshi :: class . java ). value ĊĠĠĠĠĠĠĠĠĠ Ġval Ġadapter Ġ= Ġjson . adapter < Any >( type . java Type ) ĊĊĠĠĠĠĠĠĠĠĠ Ġadapter . fromJson ( value ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġelse ĠĠĠĠĠĠĠĠĠ Ġ-> Ġthrow ĠException (" Unsupported Ġparameter : Ġ${ parameter . name }: Ġ${ parameter . type }") ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinline Ġfun Ġ< re ified ĠT > Ġconvert ( value : ĠString ): ĠT Ġ= Ġconvert ( type Of < T >(), Ġvalue ) Ġas ĠT ĊĠ Ġ} ĊĊĠ Ġval Ġsize : ĠInt Ġ= Ġraw Args . size ĊĊĠ Ġfun Ġget ( index : ĠInt ): ĠString Ġ= Ġraw Args [ index ] ĊĊĠ Ġinline Ġfun Ġ< re ified ĠT > Ġget As ( index : ĠInt ): ĠT Ġ= Ġconvert ( get ( index )) Ċ } Ċ