use encode_list_with with safe_encode_bits func
This commit is contained in:
parent
c38da6426f
commit
344620136f
|
@ -137,10 +137,14 @@ impl Encoder {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn encode_list_with<T: Encode>(&mut self, list: Vec<T>) -> Result<(), String> {
|
pub fn encode_list_with(
|
||||||
|
&mut self,
|
||||||
|
encoder_func: for<'r> fn(u8, &'r mut Encoder) -> Result<(), String>,
|
||||||
|
list: Vec<u8>,
|
||||||
|
) -> Result<(), String> {
|
||||||
for item in list {
|
for item in list {
|
||||||
self.one();
|
self.one();
|
||||||
self.encode(item)?;
|
encoder_func(item, self)?;
|
||||||
}
|
}
|
||||||
self.zero();
|
self.zero();
|
||||||
Ok(())
|
Ok(())
|
||||||
|
|
|
@ -3,6 +3,7 @@ use flat::en::{Encode, Encoder};
|
||||||
use crate::builtins::DefaultFunction;
|
use crate::builtins::DefaultFunction;
|
||||||
|
|
||||||
const TERM_TAG_WIDTH: u32 = 4;
|
const TERM_TAG_WIDTH: u32 = 4;
|
||||||
|
const CONST_TAG_WIDTH: u32 = 4;
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
pub struct Program {
|
pub struct Program {
|
||||||
|
@ -70,7 +71,11 @@ pub enum Constant {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn encode_constant(tag: u8, e: &mut Encoder) -> Result<(), String> {
|
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 {
|
impl Encode for Program {
|
||||||
|
|
Loading…
Reference in New Issue