clvm_traits/wrappers.rs
1use crate::{ClvmDecoder, ClvmEncoder, FromClvm, FromClvmError, ToClvm, ToClvmError};
2
3/// A wrapper for an intermediate CLVM value. This is required to
4/// implement `ToClvm` and `FromClvm` for `N`, since the compiler
5/// cannot guarantee that the generic `N` type doesn't already
6/// implement these traits.
7pub struct Raw<N>(pub N);
8
9impl<N, D: ClvmDecoder<Node = N>> FromClvm<D> for Raw<N> {
10 fn from_clvm(_decoder: &D, node: N) -> Result<Self, FromClvmError> {
11 Ok(Self(node))
12 }
13}
14
15impl<N, E: ClvmEncoder<Node = N>> ToClvm<E> for Raw<N> {
16 fn to_clvm(&self, encoder: &mut E) -> Result<N, ToClvmError> {
17 Ok(encoder.clone_node(&self.0))
18 }
19}