package Ġnet . nt world . kotlin . validator Ċ Ċ import Ġnet . nt world . kotlin . validator . exception . ValidationException Ċ import Ġnet . nt world . kotlin . validator . internal . Rule Collection Impl Ċ import Ġnet . nt world . kotlin . validator . internal . Validator Impl Ċ import Ġnet . nt world . kotlin . validator . rule . Array Size Ċ import Ġnet . nt world . kotlin . validator . rule . Skipped Ċ Ċ infix Ġfun Ġ< T Ġ: ĠAny > ĠRule < T >. and ( rule : ĠRule < T >): ĠRule < T > Ġ{ ĊĠĠĠ Ġif Ġ( this Ġis ĠRule Collection Impl < T >) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġthis . add Rule ( rule ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġif Ġ( rule Ġis ĠRule Collection Impl < T >) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġrule . add Rule ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġcollection Ġ= ĠRule Collection Impl < T >( Skipped ()) ĊĠĠĠ Ġreturn Ġcollection . add Rule ( this ) ĊĠĠĠĠĠĠĠ Ġ. add Rule ( rule ) Ċ } Ċ Ċ operator Ġfun Ġ< T Ġ: ĠAny > ĠRule < T >. plus ( rule : ĠRule < T >): ĠRule < T > Ġ{ ĊĠĠĠ Ġreturn Ġthis . and ( rule ) Ċ } Ċ Ċ fun Ġ< T Ġ: ĠValid atable > ĠT . validated By ( validator : ĠValidator < T >): ĠValidation Result Ġ{ ĊĠĠĠ Ġreturn Ġvalidator . validate ( this ) Ċ } Ċ Ċ fun Ġ< T Ġ: ĠValid atable > ĠT . validate ( block : ĠValidator Rules < in ĠT >. () Ġ-> ĠUnit ): ĠValidation Result Ġ{ ĊĠĠĠ Ġreturn ĠValidator Impl ( block ). validate ( this ) Ċ } Ċ Ċ infix Ġfun Ġ< T Ġ: ĠValid atable > ĠT . assert ( validator : ĠValidator < T >): ĠT Ġ{ ĊĠĠĠ Ġval Ġresult Ġ= Ġvalidator . validate ( this ) ĊĠĠĠ Ġif Ġ(! result . isValid ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthrow ĠValidation Exception ( result . errors ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġthis Ċ } Ċ Ċ infix Ġfun Ġ< T Ġ: ĠValid atable > ĠT . assert ( block : ĠValidator Rules < T >. () Ġ-> ĠUnit ): ĠT Ġ{ ĊĠĠĠ Ġval Ġresult Ġ= ĠValidator Impl ( block ). validate ( this ) ĊĠĠĠ Ġif Ġ(! result . isValid ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthrow ĠValidation Exception ( result . errors ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġthis Ċ } Ċ Ċ inline Ġfun Ġ< re ified ĠT Ġ: ĠAny > ĠValidator Rules <* >. maxSize ( value : ĠInt ): ĠRule < T > Ġ{ ĊĠĠĠ Ġreturn ĠArray Size . lte ( value Ġ= Ġvalue ) Ċ } Ċ Ċ inline Ġfun Ġ< re ified ĠT Ġ: ĠAny > ĠValidator Rules <* >. min Size ( value : ĠInt ): ĠRule < T > Ġ{ ĊĠĠĠ Ġreturn ĠArray Size . gte ( value Ġ= Ġvalue ) Ċ } Ċ Ċ inline Ġfun Ġ< re ified ĠT Ġ: ĠAny > ĠValidator Rules <* >. exact Size ( value : ĠInt ): ĠRule < T > Ġ{ ĊĠĠĠ Ġreturn ĠArray Size . eq ( value Ġ= Ġvalue ) Ċ }