package Ġcom . kt fixture . template Ċ Ċ class ĠTemplate < T > Ġprivate Ġconstructor ( private Ġval Ġclass Type : ĠClass < T >) Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġinternal Ġval Ġstructure : ĠMutable Map < String , ĠTemplate Mapping > Ġ= Ġmutable Map Of () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġconstructor ( k Class : ĠClass < T >, Ġinit : ĠTemplate < T >. () Ġ-> ĠUnit ) Ġ: Ġthis ( k Class ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinit () ĊĠĠĠĠĠĠĠ Ġstructure [ k Class . name ] Ġ= ĠTemplate Mapping ( k Class ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtemplate ( template Name : ĠString , Ġtemplate Model Builder : ĠTemplate Model Builder . () Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtemplate Ġ= ĠTemplate Mapping ( class Type ). append ( template Name , Ġtemplate Model Builder (). fields ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ= Ġ" Template ( class Type =$ class Type , structure =$ structure )" Ċ Ċ // ĠĠĠ Ġfun Ġactions (): ĠModel Builder Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġreturn ĠModel Builder () Ċ // ĠĠĠ Ġ} Ċ Ċ } Ċ Ċ type alias ĠField Ġ= ĠPair < String , ĠAny > Ċ Ċ class ĠTemplate Model Builder ( private Ġval Ġstructure : ĠTemplate Mapping , Ġprivate Ġval Ġtemplate Name : ĠString ) Ġ{ ĊĠĠĠ Ġconstructor ( template Structure : ĠTemplate Mapping , Ġtemplate Name : ĠString , Ġactions : ĠTemplate Model Builder . () Ġ-> ĠUnit ) Ġ: ĊĠĠĠĠĠĠĠ Ġthis ( template Structure , Ġtemplate Name ) Ġ{ ĊĠĠĠĠĠĠĠ Ġactions () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġusing ( data : ĠTemplate Model Builder . () Ġ-> ĠField ) Ġ= Ġapply Ġ{ Ġstructure . append ( template Name , Ġdata ()) Ġ} ĊĊĠĠĠ Ġfun Ġfields () Ġ{ ĊĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠTemplate Mapping ( private Ġval Ġclass Type : ĠClass <* >) Ġ{ ĊĠĠĠ Ġprivate Ġval Ġvalues : ĠMutable Map < String , ĠField > Ġ= Ġmutable Map Of () ĊĊĠĠĠ Ġfun Ġappend ( template Name : ĠString , Ġdata : ĠField ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvalues [ template Name ] Ġ= Ġdata ĊĠĠĠ Ġ} Ċ } Ċ Ċ infix Ġfun Ġ< A , ĠB > ĠA . with Value ( that : ĠB ): ĠPair < A , ĠB > Ġ= ĠPair ( this , Ġthat )