Trait ClvmEncoder

Source
pub trait ClvmEncoder: Sized {
    type Node: Clone + ToClvm<Self>;

    // Required methods
    fn encode_atom(&mut self, atom: Atom<'_>) -> Result<Self::Node, ToClvmError>;
    fn encode_pair(
        &mut self,
        first: Self::Node,
        rest: Self::Node,
    ) -> Result<Self::Node, ToClvmError>;

    // Provided methods
    fn encode_bigint(
        &mut self,
        number: BigInt,
    ) -> Result<Self::Node, ToClvmError> { ... }
    fn encode_curried_arg(
        &mut self,
        first: Self::Node,
        rest: Self::Node,
    ) -> Result<Self::Node, ToClvmError> { ... }
    fn clone_node(&self, node: &Self::Node) -> Self::Node { ... }
}

Required Associated Types§

Source

type Node: Clone + ToClvm<Self>

Required Methods§

Source

fn encode_atom(&mut self, atom: Atom<'_>) -> Result<Self::Node, ToClvmError>

Source

fn encode_pair( &mut self, first: Self::Node, rest: Self::Node, ) -> Result<Self::Node, ToClvmError>

Provided Methods§

Source

fn encode_bigint(&mut self, number: BigInt) -> Result<Self::Node, ToClvmError>

Source

fn encode_curried_arg( &mut self, first: Self::Node, rest: Self::Node, ) -> Result<Self::Node, ToClvmError>

Source

fn clone_node(&self, node: &Self::Node) -> Self::Node

This is a helper function that just calls clone on the node. It’s required only because the compiler can’t infer that N is Clone, since there’s no Clone bound on the ToClvm trait.

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementations on Foreign Types§

Source§

impl ClvmEncoder for Allocator

Source§

type Node = NodePtr

Source§

fn encode_atom(&mut self, atom: Atom<'_>) -> Result<Self::Node, ToClvmError>

Source§

fn encode_pair( &mut self, first: Self::Node, rest: Self::Node, ) -> Result<Self::Node, ToClvmError>

Source§

fn encode_bigint(&mut self, number: BigInt) -> Result<Self::Node, ToClvmError>

Implementors§