hermes-encoding-components 0.1.0

Implementation of an IBC Relayer in Rust, as a library
Documentation
use core::marker::PhantomData;

use cgp::core::Async;

use crate::traits::decode::{CanDecode, Decoder};
use crate::traits::encode::{CanEncode, Encoder};

pub struct EncodeUsingStrategy<Strategy>(pub PhantomData<Strategy>);

impl<Encoding, Strategy, InStrategy, Value> Encoder<Encoding, Strategy, Value>
    for EncodeUsingStrategy<InStrategy>
where
    Encoding: CanEncode<InStrategy, Value>,
    InStrategy: Async,
{
    fn encode(encoding: &Encoding, value: &Value) -> Result<Encoding::Encoded, Encoding::Error> {
        <Encoding as CanEncode<InStrategy, Value>>::encode(encoding, value)
    }
}

impl<Encoding, Strategy, InStrategy, Value> Decoder<Encoding, Strategy, Value>
    for EncodeUsingStrategy<InStrategy>
where
    Encoding: CanDecode<InStrategy, Value>,
    InStrategy: Async,
{
    fn decode(encoding: &Encoding, value: &Encoding::Encoded) -> Result<Value, Encoding::Error> {
        <Encoding as CanDecode<InStrategy, Value>>::decode(encoding, value)
    }
}