package Ġde . mus ich in . fire ko . processor . converters Ċ Ċ import Ġcom . squareup . kotlin po et . BYTE Ċ import Ġcom . squareup . kotlin po et . CHAR Ċ import Ġcom . squareup . kotlin po et . CHAR _ SEQUENCE Ċ import Ġcom . squareup . kotlin po et . ClassName Ċ import Ġcom . squareup . kotlin po et . Code Block Ċ import Ġcom . squareup . kotlin po et . DOUBLE Ċ import Ġcom . squareup . kotlin po et . FLOAT Ċ import Ġcom . squareup . kotlin po et . INT Ċ import Ġcom . squareup . kotlin po et . LONG Ċ import Ġcom . squareup . kotlin po et . NUMBER Ċ import Ġcom . squareup . kotlin po et . SHORT Ċ import Ġcom . squareup . kotlin po et . STRING Ċ import Ġcom . squareup . kotlin po et . TypeName Ċ import Ġde . mus ich in . fire ko . processor . Converter Ċ import Ġde . mus ich in . fire ko . processor . ValueType Ċ import Ġde . mus ich in . fire ko . processor . call Ċ import Ġde . mus ich in . fire ko . processor . invoke To Type Ċ import Ġde . mus ich in . fire ko . processor . is OneOf Ċ import Ġde . mus ich in . fire ko . processor . isString Ċ Ċ internal Ġabstract Ġclass ĠNumber Converter Ġ: ĠConverter () Ġ{ ĊĠĠĠ Ġoverride Ġfun ĠCode Block . Builder . convert ( ĊĠĠĠĠĠĠĠ Ġsource : ĠType Name , ĊĠĠĠĠĠĠĠ Ġtarget : ĠType Name ĊĠĠĠ Ġ): ĠCode Block . Builder Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠ Ġsource . isNumber () Ġ&& Ġtarget . isNumber () Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconvert Number ( source , Ġtarget ) ĊĊĠĠĠĠĠĠĠ Ġsource . isString () Ġ&& Ġtarget . isNumber () Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconvert Number ( source , Ġtarget ) ĊĊĠĠĠĠĠĠĠ Ġsource . isNumber () Ġ&& Ġtarget . is OneOf ( CHAR _ SEQUENCE , ĠSTRING ) Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcall ( source ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd (" toString () ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow Conversion Error ( source , Ġtarget ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠCode Block . Builder . convert Number ( ĊĠĠĠĠĠĠĠ Ġsource : ĠType Name , ĊĠĠĠĠĠĠĠ Ġtarget : ĠType Name ĊĠĠĠ Ġ): ĠCode Block . Builder Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( source . copy ( nullable Ġ= Ġfalse ) Ġ== Ġtarget . copy ( nullable Ġ= Ġfalse )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( source . isNumber () Ġ&& Ġtarget . is OneOf ( NUMBER )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( source . isNumber () Ġ&& Ġtarget . is OneOf ( CHAR )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġinvoke To Type ( source . is Nullable , ĠINT . simple Name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. invoke To Type ( source . is Nullable , ĠCHAR . simple Name ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( source . is OneOf ( CHAR ) Ġ&& Ġtarget . isNumber ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcall (). add (" code ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. invoke To Type ( source . is Nullable , Ġ( target Ġas ĠClass Name ). simple Name ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( source . isNumber ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġinvoke To Type ( source . is Nullable , Ġ( target Ġas ĠClass Name ). simple Name ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( source . is OneOf ( STRING )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġinvoke To Type ( source . is Nullable , Ġ( target Ġas ĠClass Name ). simple Name ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠTODO ĠRational ĊĠĠĠĠĠĠĠ Ġ// ĠTODO ĠBigDecimal ĊĊĠĠĠĠĠĠĠ Ġthrow Conversion Error ( source , Ġtarget ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġobject ĠDouble Number Converter Ġ: ĠNumber Converter () Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġvalue Types : ĠList < ValueType > Ġ= ĠlistOf ( ValueType . DOUBLE , ĠValueType . STRING ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġobject ĠInteger Number Converter Ġ: ĠNumber Converter () Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġvalue Types : ĠList < ValueType > Ġ= ĠlistOf ( ValueType . INTEGER , ĠValueType . STRING ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġobject ĠFactory Ġ: ĠConverter . Factory Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcreate ( type : ĠType Name ): ĠConverter ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( type . is Floating ()) Ġreturn ĠDouble Number Converter ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( type . is OneOf ( NUMBER )) Ġreturn ĠDouble Number Converter ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġif Ġ( type . isNumber ()) Ġreturn ĠInteger Number Converter ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun ĠType Name . isNumber (): ĠBoolean Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis OneOf ( NUMBER , ĠCHAR , ĠBYTE , ĠSH ORT , ĠINT , ĠLONG , ĠFLOAT , ĠDOUBLE ) ĊĊĠĠĠĠĠĠĠ Ġfun ĠType Name . is Floating (): ĠBoolean Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis OneOf ( FLOAT , ĠDOUBLE ) ĊĠĠĠ Ġ} Ċ } Ċ