package Ġcom . shop runner . b ale en . types Ċ Ċ import Ġcom . shop runner . b ale en . B ale en Type Ċ import Ġcom . shop runner . b ale en . Data Trace Ċ import Ġcom . shop runner . b ale en . ValidationError Ċ import Ġcom . shop runner . b ale en . Validation Result Ċ Ċ open Ġclass ĠString Co erc ible To Type < out ĠT Ġ: ĠB ale en Type >( type : ĠT , Ġprivate Ġval Ġconverter : Ġ( String ) Ġ-> ĠAny ?) Ġ: ĠCo erc ible Type < StringType , ĠT >( type ) Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġname () Ġ= Ġ" string Ġco erc ible Ġto Ġ${ type . name () }" ĊĊĠĠĠ Ġoverride Ġfun Ġvalidate ( data Trace : ĠData Trace , Ġvalue : ĠAny ?): ĠSequence < Validation Result > Ġ= ĊĠĠĠĠĠĠĠ Ġwhen Ġ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull Ġ-> Ġtype . validate ( data Trace , Ġvalue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ! is ĠString Ġ-> Ġsequence Of ( ValidationError ( data Trace , Ġ" is Ġnot Ġa Ġstring ", Ġvalue )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Type Ġ= Ġconverter ( value ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( new Type Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsequence Of ( ValidationError ( data Trace , Ġ" could Ġnot Ġbe Ġparsed Ġto Ġ${ type . name () }", Ġvalue )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype . validate ( data Trace , Ġnew Type ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ċ } Ċ