klvm_traits/
wrappers.rs

1use crate::{FromKlvm, FromKlvmError, KlvmDecoder, KlvmEncoder, ToKlvm, ToKlvmError};
2
3/// A wrapper for an intermediate KLVM value. This is required to
4/// implement `ToKlvm` and `FromKlvm` 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: KlvmDecoder<Node = N>> FromKlvm<D> for Raw<N> {
10    fn from_klvm(_decoder: &D, node: N) -> Result<Self, FromKlvmError> {
11        Ok(Self(node))
12    }
13}
14
15impl<N, E: KlvmEncoder<Node = N>> ToKlvm<E> for Raw<N> {
16    fn to_klvm(&self, encoder: &mut E) -> Result<N, ToKlvmError> {
17        Ok(encoder.clone_node(&self.0))
18    }
19}