Add clause guard to IR and use it for complex clauses

This commit is contained in:
Kasey White
2022-12-02 04:19:08 -05:00
committed by Lucas
parent e1d6ffa92a
commit 64cbae938d
3 changed files with 342 additions and 75 deletions

View File

@@ -47,12 +47,7 @@ pub fn who(a: ByteArray) -> ByteArray {
}
pub type Datum {
Offer {
price: Int,
asset_class: ByteArray,
thing: Int,
other_thing: Redeemer,
}
Offer { prices: List(Int), asset_class: ByteArray, other_thing: Redeemer }
Sell
Hold(Int)
}
@@ -60,16 +55,29 @@ pub type Datum {
pub fn spend(datum: Datum, _rdmr: Nil, _ctx: Nil) -> Bool {
when datum is {
Sell -> sample.eqIntPlusOne(sample.incrementor(0, 8), 9)
Offer {
prices: p,
asset_class: ac,
other_thing: Redeemer {
other_thing: Redeemer { signer: nested_signer, amount, .. },
..
},
} -> True
_ -> False
}
// let Redeemer{ signer, amount: amount2, other_thing: Redeemer{ signer: nested_signer, ..}} = datum
// True
// when datum is {
// Offer{ price: p, asset_class: ac, thing: thing, other_thing: Redeemer{ other_thing: Redeemer{ signer: nested_signer, amount: amount, ..}, .. } } -> True
// _ -> False
// }
}
// let Redeemer{ signer, amount: amount2, other_thing: Redeemer{ signer: nested_signer, ..}} = datum
// True
// when datum is {
// Offer{ price: p, asset_class: ac, thing: thing, other_thing: Redeemer{ other_thing: Redeemer{ signer: nested_signer, amount: amount, ..}, .. } } -> True
// _ -> False
// }
// Offer{ prices, other_thing: thing, .. } -> {
// when prices is {
// [] -> True
// [1] -> False
// [a, b] -> True
// [a, b, ..c] -> False
// }
// }