From 344620136f6a7a4b971127dfa08cbfe452fda9bf Mon Sep 17 00:00:00 2001 From: Kasey White Date: Mon, 23 May 2022 12:20:04 -0400 Subject: [PATCH] use encode_list_with with safe_encode_bits func --- crates/flat/src/encoder.rs | 8 ++++++-- crates/uplc/src/ast.rs | 7 ++++++- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/crates/flat/src/encoder.rs b/crates/flat/src/encoder.rs index 436b7c42..84f094c0 100644 --- a/crates/flat/src/encoder.rs +++ b/crates/flat/src/encoder.rs @@ -137,10 +137,14 @@ impl Encoder { } } - pub fn encode_list_with(&mut self, list: Vec) -> Result<(), String> { + pub fn encode_list_with( + &mut self, + encoder_func: for<'r> fn(u8, &'r mut Encoder) -> Result<(), String>, + list: Vec, + ) -> Result<(), String> { for item in list { self.one(); - self.encode(item)?; + encoder_func(item, self)?; } self.zero(); Ok(()) diff --git a/crates/uplc/src/ast.rs b/crates/uplc/src/ast.rs index 07f0318e..33a44e1b 100644 --- a/crates/uplc/src/ast.rs +++ b/crates/uplc/src/ast.rs @@ -3,6 +3,7 @@ use flat::en::{Encode, Encoder}; use crate::builtins::DefaultFunction; const TERM_TAG_WIDTH: u32 = 4; +const CONST_TAG_WIDTH: u32 = 4; #[derive(Debug)] pub struct Program { @@ -70,7 +71,11 @@ pub enum Constant { } pub fn encode_constant(tag: u8, e: &mut Encoder) -> Result<(), String> { - e.encode_list_with([tag].to_vec()) + e.encode_list_with(encode_constant_tag, [tag].to_vec()) +} + +pub fn encode_constant_tag(tag: u8, e: &mut Encoder) -> Result<(), String> { + safe_encode_bits(CONST_TAG_WIDTH, tag, e) } impl Encode for Program {