From 4a5c3fc0c4d3def3305b1bbee97f67e622e62623 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicolas=20Ludue=C3=B1a?= Date: Tue, 2 Dec 2025 00:14:41 -0300 Subject: [PATCH] feat: deserializable custom type params --- crates/tx3-lang/src/applying.rs | 4 ++++ crates/tx3-lang/src/lib.rs | 7 +++++++ 2 files changed, 11 insertions(+) diff --git a/crates/tx3-lang/src/applying.rs b/crates/tx3-lang/src/applying.rs index f517be69..e19ed7f5 100644 --- a/crates/tx3-lang/src/applying.rs +++ b/crates/tx3-lang/src/applying.rs @@ -294,6 +294,10 @@ fn arg_value_into_expr(arg: ArgValue) -> ir::Expression { ArgValue::Bytes(x) => ir::Expression::Bytes(x), ArgValue::UtxoSet(x) => ir::Expression::UtxoSet(x), ArgValue::UtxoRef(x) => ir::Expression::UtxoRefs(vec![x]), + ArgValue::Custom(x) => ir::Expression::Struct(ir::StructExpr { + constructor: x.constructor, + fields: x.fields.into_iter().map(arg_value_into_expr).collect(), + }), } } diff --git a/crates/tx3-lang/src/lib.rs b/crates/tx3-lang/src/lib.rs index 9f16de8f..e68aa3d4 100644 --- a/crates/tx3-lang/src/lib.rs +++ b/crates/tx3-lang/src/lib.rs @@ -92,6 +92,12 @@ impl Eq for Utxo {} pub type UtxoSet = HashSet; +#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)] +pub struct CustomValue { + pub constructor: usize, + pub fields: Vec, +} + #[derive(Debug, Clone, serde::Serialize, serde::Deserialize)] pub enum ArgValue { Int(i128), @@ -101,6 +107,7 @@ pub enum ArgValue { Address(Vec), UtxoSet(UtxoSet), UtxoRef(UtxoRef), + Custom(CustomValue), } impl From> for ArgValue {