use clvmr::{allocator::NodePtr, Allocator};
use crate::ToClvmError;
pub trait ClvmEncoder {
type Node: Clone;
fn encode_atom(&mut self, bytes: &[u8]) -> Result<Self::Node, ToClvmError>;
fn encode_pair(
&mut self,
first: Self::Node,
rest: Self::Node,
) -> Result<Self::Node, ToClvmError>;
fn clone_node(&self, node: &Self::Node) -> Self::Node {
node.clone()
}
}
impl ClvmEncoder for Allocator {
type Node = NodePtr;
fn encode_atom(&mut self, bytes: &[u8]) -> Result<Self::Node, ToClvmError> {
self.new_atom(bytes).or(Err(ToClvmError::OutOfMemory))
}
fn encode_pair(
&mut self,
first: Self::Node,
rest: Self::Node,
) -> Result<Self::Node, ToClvmError> {
self.new_pair(first, rest).or(Err(ToClvmError::OutOfMemory))
}
}