// ĠRed undant Ġescap ing Ġin Ġthis Ġfile Ġrequired Ġfor ĠAndroid Ġsupport . Ċ @ file : Suppress (" RegExp Red undant Escape ") Ċ Ċ package Ġcom . sk sam uel . hop lite . preprocessor Ċ Ċ import Ġcom . sk sam uel . hop lite . Config Result Ċ import Ġcom . sk sam uel . hop lite . Node Ċ import Ġcom . sk sam uel . hop lite . Primitive Node Ċ import Ġcom . sk sam uel . hop lite . String Node Ċ import Ġcom . sk sam uel . hop lite . fp . valid Ċ import Ġjava . util . UUID Ċ import Ġkotlin . math . abs Ċ import Ġkotlin . random . Random Ċ Ċ private Ġtype alias ĠRule Ġ= Ġ( String ) Ġ-> ĠString Ċ Ċ object ĠRandom Pre processor Ġ: ĠTr aver sing Primitive Pre processor () Ġ{ ĊĊĠ Ġprivate Ġconst Ġval Ġa Ġ= Ġ' a ' ĊĠ Ġprivate Ġconst Ġval Ġz Ġ= Ġ' z ' ĊĊĠ Ġprivate Ġval Ġint Rule : ĠRule Ġ= Ġ{ ĊĠĠĠ Ġval Ġregex Ġ= Ġ"\\ $ \\ { random . int \\ }". to Regex () ĊĠĠĠ Ġregex . replace ( it ) Ġ{ Ġabs ( Random . nextInt ()). toString () Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġval Ġboolean Rule : ĠRule Ġ= Ġ{ ĊĠĠĠ Ġval Ġregex Ġ= Ġ"\\ $ \\ { random . boolean \\ }". to Regex () ĊĠĠĠ Ġregex . replace ( it ) Ġ{ ĠRandom . next Boolean (). toString () Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġval Ġint With Max Rule : ĠRule Ġ= Ġ{ ĊĠĠĠ Ġval Ġregex Ġ= Ġ"\\ $ \\ { random . int \\ (\\ s *( \\ d +) \\ s * \\ )\\ }". to Regex () ĊĠĠĠ Ġregex . replace ( it ) Ġ{ Ġmatch Ġ-> ĊĠĠĠĠĠ Ġval Ġmax Ġ= Ġmatch . group Values [ 1 ]. toInt () ĊĠĠĠĠĠ ĠRandom . nextInt ( 0 , Ġmax ). toString () ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġval Ġint With Range Rule : ĠRule Ġ= Ġ{ ĊĠĠĠ Ġval Ġregex Ġ= Ġ"\\ $ \\ { random . int \\ (\\ s *( \\ d +) \\ s *, \\ s *( \\ d +) \\ s * \\ )\\ }". to Regex () ĊĠĠĠ Ġregex . replace ( it ) Ġ{ Ġmatch Ġ-> ĊĠĠĠĠĠ Ġval Ġmin Ġ= Ġmatch . group Values [ 1 ]. toInt () ĊĠĠĠĠĠ Ġval Ġmax Ġ= Ġmatch . group Values [ 2 ]. toInt () ĊĠĠĠĠĠ ĠRandom . nextInt ( min , Ġmax ). toString () ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġval Ġlong Rule : ĠRule Ġ= Ġ{ ĊĠĠĠ Ġval Ġregex Ġ= Ġ"\\ $ \\ { random . long \\ }". to Regex () ĊĠĠĠ Ġregex . replace ( it ) Ġ{ Ġabs ( Random . next Long ()). toString () Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġval Ġdouble Rule : ĠRule Ġ= Ġ{ ĊĠĠĠ Ġval Ġregex Ġ= Ġ"\\ $ \\ { random . double \\ }". to Regex () ĊĠĠĠ Ġregex . replace ( it ) Ġ{ ĠRandom . next Long (). toString () Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġval Ġstring Rule : ĠRule Ġ= Ġ{ ĊĠĠĠ Ġval Ġregex Ġ= Ġ"\\ $ \\ { random . string \\ (\\ s *( \\ d +) \\ s * \\ )\\ }". to Regex () ĊĠĠĠ Ġregex . replace ( it ) Ġ{ Ġmatch Ġ-> ĊĠĠĠĠĠ Ġval Ġlength Ġ= Ġmatch . group Values [ 1 ]. toInt () ĊĠĠĠĠĠ Ġval Ġchars Ġ= ĠChar Array ( length ) Ġ{ ĠRandom . nextInt ( a . code , Ġz . code ). to Char () Ġ} ĊĠĠĠĠĠ ĠString ( chars ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġval Ġuuid Rule : ĠRule Ġ= Ġ{ ĊĠĠĠ Ġval Ġregex Ġ= Ġ"\\ $ \\ { random . uuid \\ }". to Regex () ĊĠĠĠ Ġregex . replace ( it ) Ġ{ ĊĠĠĠĠĠ ĠUUID . randomUUID (). toString () ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġval Ġrules Ġ= ĠlistOf ( ĊĠĠĠ Ġint Rule , ĊĠĠĠ Ġlong Rule , ĊĠĠĠ Ġint With Max Rule , ĊĠĠĠ Ġboolean Rule , ĊĠĠĠ Ġdouble Rule , ĊĠĠĠ Ġint With Range Rule , ĊĠĠĠ Ġstring Rule , ĊĠĠĠ Ġuuid Rule ĊĠ Ġ) ĊĊĠ Ġoverride Ġfun Ġhandle ( node : ĠPrimitive Node ): ĠConfig Result < Node > Ġ= Ġwhen Ġ( node ) Ġ{ ĊĠĠĠ Ġis ĠString Node Ġ-> Ġ{ ĊĠĠĠĠĠ Ġval Ġvalue Ġ= Ġrules . fold ( node . value ) Ġ{ Ġstr , Ġrule Ġ-> Ġrule ( str ) Ġ} ĊĠĠĠĠĠ Ġnode . copy ( value Ġ= Ġvalue ). valid () ĊĠĠĠ Ġ} ĊĠĠĠ Ġelse Ġ-> Ġnode . valid () ĊĠ Ġ} Ċ } Ċ