package Ġio . monkey patch . k aval . arrow . validator Ċ Ċ import Ġarrow . core . N el Ċ import Ġarrow . core . Non Empty List Ċ import Ġio . monkey patch . k aval . core . Validator Ċ import Ġio . monkey patch . k aval . core . field Ċ import Ġio . monkey patch . k aval . core . validator . Collections Ċ import Ġio . monkey patch . k aval . core . validator . Comp ar ables Ċ Ċ /** Ċ Ġ* ĠProvide Ġvalidators Ġfor ĠArrow Kt Ġ[ Non Empty List ] Ċ Ġ*/ Ċ object ĠNon Empty Lists Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠA Ġvalidator Ġcheck Ġsize Ġof Ġa Ġ[ Non Empty List ] ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param ĠT Ġthe Ġelement Ġtype ĊĠĠĠĠ Ġ* Ġ@ param Ġsize Ġthe Ġexpected Ġsize ĊĠĠĠĠ Ġ* Ġ@ return Ġthe Ġnel Ġvalidator ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġ< T > Ġhas Size ( size : ĠInt ): ĠValidator < N el < T >> Ġ= ĊĠĠĠĠĠĠĠ Ġfield (" size ", ĠN el < T >:: size ) Ġ{ ĠComp ar ables . equals To ( size ) Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠA Ġvalidator Ġcheck Ġmaximum Ġsize Ġof Ġa Ġ[ Non Empty List ] ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param ĠT Ġthe Ġelement Ġtype ĊĠĠĠĠ Ġ* Ġ@ param Ġsize Ġthe Ġmaximum Ġsize ĊĠĠĠĠ Ġ* Ġ@ return Ġthe Ġnel Ġvalidator ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġ< T > ĠmaxSize ( size : ĠInt ): ĠValidator < N el < T >> Ġ= ĊĠĠĠĠĠĠĠ Ġfield (" size ", ĠN el < T >:: size ) Ġ{ ĠComp ar ables . lower OrEqualTo ( size ) Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠA Ġvalidator Ġcheck Ġminimum Ġsize Ġof Ġa Ġ[ Non Empty List ] ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param ĠT Ġthe Ġelement Ġtype ĊĠĠĠĠ Ġ* Ġ@ param Ġsize Ġthe Ġminimum Ġsize ĊĠĠĠĠ Ġ* Ġ@ return Ġthe Ġnel Ġvalidator ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġ< T > Ġmin Size ( size : ĠInt ): ĠValidator < N el < T >> Ġ= ĊĠĠĠĠĠĠĠ Ġfield (" size ", ĠN el < T >:: size ) Ġ{ ĠComp ar ables . greater OrEqualTo ( size ) Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠValidate Ġa Ġ[ Non Empty List ] Ġif Ġall Ġelements Ġare Ġvalid ĊĠĠĠĠ Ġ* ĠIf Ġthe Ġ[ Non Empty List ] Ġis Ġempty , Ġit Ġis Ġvalid ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param ĠT Ġthe Ġelement Ġtype ĊĠĠĠĠ Ġ* Ġ@ param Ġelement Validator Ġthe Ġelement Ġvalidator ĊĠĠĠĠ Ġ* Ġ@ return Ġthe Ġnel Ġvalidator ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġ< T > Ġall Valid ( element Validator : Ġ() Ġ-> ĠValidator < T >): ĠValidator < N el < T >> Ġ= ĊĠĠĠĠĠĠĠ Ġ{ Ġnel Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCollections . all Valid ( element Validator )( nel . as Iterable ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠValidate Ġa Ġ[ Non Empty List ] Ġthat Ġrequires Ġat Ġleast Ġone Ġelement Ġvalid ĊĠĠĠĠ Ġ* ĠIf Ġthe Ġ[ Non Empty List ] Ġis Ġempty , Ġit Ġis Ġnot Ġvalid ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param ĠT Ġthe Ġelement Ġtype ĊĠĠĠĠ Ġ* Ġ@ param Ġelement Validator Ġthe Ġelement Ġvalidator ĊĠĠĠĠ Ġ* Ġ@ return Ġthe Ġnel Ġvalidator ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġ< T > Ġat Least One Valid ( element Validator : Ġ() Ġ-> ĠValidator < T >): ĠValidator < N el < T >> Ġ= ĊĠĠĠĠĠĠĠ Ġ{ Ġnel Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCollections . at Least One Valid ( element Validator )( nel . as Iterable ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġ< T > ĠN el < T >. as Iterable (): ĠIterable < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġthat Ġ= Ġthis ĊĠĠĠĠĠĠĠ Ġreturn Ġobject Ġ: ĠIterable < T > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġiterator (): ĠIterator < T > Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthat . iterator () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ