package Ġsoftware . amazon . ion schema . internal Ċ Ċ import Ġsoftware . amazon . ion . Ion Struct Ċ import Ġsoftware . amazon . ion . Ion Value Ċ import Ġsoftware . amazon . ion schema . Schema Ċ import Ġsoftware . amazon . ion schema . Violation Ċ import Ġsoftware . amazon . ion schema . Vi olations Ċ import Ġsoftware . amazon . ion schema . internal . constraint . Constraint Base Ċ Ċ /** Ċ Ġ* ĠType Ġimplementation Ġinstantiated Ġto Ġrepresent Ġbuilt - in Ġtypes . Ċ Ġ* Ċ Ġ* Ġ@ see ĠType Builtin Ċ Ġ*/ Ċ internal Ġclass ĠType Builtin Impl Ġprivate Ġconstructor ( ĊĠĠĠĠĠĠĠ Ġion Ġ: ĠIon Struct , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġdelegate : ĠType Internal Ċ ) Ġ: ĠType Internal Ġby Ġdelegate , ĠConstraint Base ( ion ), ĠType Builtin Ġ{ ĊĊĠĠĠ Ġconstructor Ġ( ion Struct : ĠIon Struct , Ġschema : ĠSchema ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ: Ġthis ( ion Struct , ĠType Impl ( ion Struct , Ġschema , Ġadd Default Type Constraint Ġ= Ġfalse )) ĊĊĠĠĠ Ġoverride Ġval Ġname Ġ= Ġion . fieldName ĊĊĠĠĠ Ġoverride Ġfun Ġvalidate ( value : ĠIon Value , Ġissues : ĠVi olations ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstruct Ġ= Ġion . system . new Empty Struct () ĊĠĠĠĠĠĠĠ Ġstruct . put (" type ", Ġion . system . new Symbol ( name )) ĊĠĠĠĠĠĠĠ Ġval Ġviolation Ġ= ĠVi olation ( struct , Ġ" type _ mismatch ") ĊĠĠĠĠĠĠĠ Ġdelegate . validate ( value , Ġviolation ) ĊĠĠĠĠĠĠĠ Ġif Ġ(! violation . isValid ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġviolation . message Ġ= Ġ" expected Ġtype Ġ% s ". format ( name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġissues . add ( violation ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } ĊĊ