package Ġorg . http 4 k . lens Ċ Ċ /** Ċ Ġ* ĠRuns Ġthrough Ġa Ġlist Ġof Ġl enses Ġand Ġextract s Ġthe Ġvalues Ġfrom Ġeach Ġone , Ġcollecting Ġthe Ġerrors Ċ Ġ*/ Ċ enum Ġclass ĠValidator ( private Ġval Ġact On : Ġ( Lens Failure ) Ġ-> ĠList < Failure >) Ġ{ ĊĠĠĠ ĠStrict ({ Ġif Ġ( it . failures . isNotEmpty ()) Ġthrow Ġit Ġelse Ġit . failures Ġ}), ĊĠĠĠ ĠFeedback ({ Ġit . failures Ġ}), ĊĠĠĠ ĠIgnore ({ Ġempty List < Failure >() Ġ}); ĊĊĠĠĠ Ġoperator Ġfun Ġ< T Ġ: ĠAny > Ġinvoke ( entity : ĠT , Ġl enses : ĠList < Lens Extractor < T , Ġ* >> ): ĠList < Failure > Ġ= ĊĠĠĠĠĠĠĠ Ġcollect Errors ( l enses , Ġentity ). run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġact On ( when Ġ( size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 Ġ-> ĠLens Failure () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġ-> Ġfirst () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠLens Failure ( flatMap Ġ{ Ġit . failures Ġ}, ĠLens Failures ( this ), Ġentity ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġ< T Ġ: ĠAny > Ġcollect Errors ( l enses : ĠList < Lens Extractor < T , Ġ* >>, Ġentity : ĠT ): ĠList < Lens Failure > Ġ= ĊĠĠĠĠĠĠĠ Ġl enses . fold ( emptyList ()) Ġ{ Ġmemo , Ġnext Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnext ( entity ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmemo ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠLens Failure ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmemo Ġ+ Ġe ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ċ } Ċ Ċ data Ġclass ĠLens Failures ( val Ġcauses : ĠList < Lens Failure >) Ġ: ĠRuntimeException () Ċ