package Ġio . k loud formation . function Ċ Ċ import Ġcom . fasterxml . jackson . core . Json Generator Ċ import Ġcom . fasterxml . jackson . databind . Serializer Provider Ċ import Ġcom . fasterxml . jackson . databind . annotation . Json Serialize Ċ import Ġcom . fasterxml . jackson . databind . ser . std . Std Serializer Ċ import Ġio . k loud formation . Value Ċ Ċ interface ĠIntr insic Ċ interface ĠConditional Value < T > Ġ: ĠIntr insic Ċ @ Json Serialize ( using Ġ= ĠConditional . Serializer :: class ) Ċ interface ĠConditional Ġ: ĠConditional Value < Boolean >, ĠValue < Boolean > Ġ{ ĊĠĠĠ Ġclass ĠSerializer Ġ: ĠStd Serializer < Conditional >( Conditional :: class . java ) Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġserialize ( item : ĠConditional , Ġgenerator : ĠJson Generator , Ġprovider : ĠSerializer Provider ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgenerator . write Start Object () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( item ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠAnd Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgenerator . write Array Field Start (" Fn :: And ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgenerator . write Object ( item . a ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgenerator . write Object ( item . b ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠEquals Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgenerator . write Array Field Start (" Fn :: Equals ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgenerator . write Object ( item . a ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgenerator . write Object ( item . b ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠNot Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgenerator . write Array Field Start (" Fn :: Not ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgenerator . write Object ( item . a ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠOr Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgenerator . write Array Field Start (" Fn :: Or ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgenerator . write Object ( item . a ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgenerator . write Object ( item . b ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠCondition Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgenerator . write Object Field (" Condition ", Ġitem . logical Name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgenerator . write End Array () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgenerator . write End Object () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ data Ġclass ĠCondition ( val Ġlogical Name : ĠString ) Ġ: ĠConditional Value < Boolean >, ĠConditional Ċ data Ġclass ĠAnd ( val Ġa : ĠConditional Value < Boolean >, Ġval Ġb : ĠConditional Value < Boolean >) Ġ: ĠConditional Ċ data Ġclass ĠOr ( val Ġa : ĠConditional Value < Boolean >, Ġval Ġb : ĠConditional Value < Boolean >) Ġ: ĠConditional Ċ Ċ interface ĠEquals Value Ċ data Ġclass ĠEquals ( val Ġa : ĠEquals Value , Ġval Ġb : ĠEquals Value ) Ġ: ĠConditional Ċ Ċ data Ġclass ĠNot ( val Ġa : ĠConditional Value < Boolean >) Ġ: ĠConditional Ċ Ċ infix Ġfun ĠConditional Value < Boolean >. and ( b : ĠConditional Value < Boolean >) Ġ= ĠAnd ( this , Ġb ) Ċ infix Ġfun ĠConditional Value < Boolean >. or ( b : ĠConditional Value < Boolean >) Ġ= ĠOr ( this , Ġb ) Ċ infix Ġfun ĠEquals Value . eq ( b : ĠEquals Value ) Ġ= ĠEquals ( this , Ġb ) Ċ fun Ġnot ( value : ĠConditional Value < Boolean >) Ġ= ĠNot ( value ) Ċ