package Ġcom . nat ig bab ay ev . checkpoint . core Ċ Ċ /** Ċ Ġ* ĠChild Ġof Ġ[ Default Rule ] Ġwhich Ġaccepts Ġlist Ġof Ġ[ Default Rule ]. Ċ Ġ* ĠWhen Ġ[ Checkpoint . can Pass ] Ġis Ġinvoked , Ġfunction Ġwill Ġgo Ġthrough Ġall Ġof Ġthe Ġpassed Ġrules Ċ Ġ* Ġand Ġinvoke Ġ[ Default Rule . can Pass ] Ġof Ġeach Ġrule Ġuntil Ġfirst Ġitem Ġthat Ġcannot Ġpass . Ċ Ġ* ĠCreate Ġinstance Ġof Ġclass Ġusing Ġ[ Checkpoint . Builder ] Ġor Ġ[ checkpoint ] Ġd sl . Ċ Ġ*/ Ċ class ĠCheck point < INPUT > Ġprivate Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġrules : ĠList < Default Rule < INPUT >> Ċ ) Ġ: ĠDefault Rule < INPUT >() Ġ{ ĊĊĠĠĠ Ġoverride Ġval Ġcallback : ĠCallback < INPUT >? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun ĠisValid ( input : ĠINPUT ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġrules . first OrNull Ġ{ Ġ! it . can Pass ( input ) Ġ} Ġ== Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Checkpoint Dsl Marker ĊĠĠĠ Ġclass ĠBuilder < INPUT > Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġrules Ġ= Ġmutable ListOf < Default Rule < INPUT >>() ĊĊĠĠĠĠĠĠĠ Ġfun Ġadd Rules ( rules : ĠList < Default Rule < INPUT >>) Ġ= Ġapply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . rules Ġ+= Ġrules ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġadd Rule ( rule : ĠDefault Rule < INPUT >) Ġ= Ġapply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . rules Ġ+= Ġrule ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġbuild (): ĠCheck point < INPUT > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequire ( rules . isNotEmpty ()) Ġ{ Ġ" You Ġshould Ġset Ġat Ġleast Ġ 1 Ġrule ." Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠCheck point ( rules Ġ= Ġrules ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ