use commonware_codec::{CodecFixedShared, CodecShared};
use std::marker::PhantomData;
mod sealed {
use commonware_codec::CodecShared;
pub trait ValueEncoding: Clone + Send + Sync {
type Value: CodecShared + Clone;
}
}
pub use sealed::ValueEncoding;
#[derive(Clone, Debug, PartialEq, Eq)]
pub struct FixedEncoding<V: FixedValue>(PhantomData<V>);
impl<V: FixedValue> sealed::ValueEncoding for FixedEncoding<V> {
type Value = V;
}
#[derive(Clone, Debug, PartialEq, Eq)]
pub struct VariableEncoding<V: VariableValue>(PhantomData<V>);
impl<V: VariableValue> sealed::ValueEncoding for VariableEncoding<V> {
type Value = V;
}
pub trait FixedValue: CodecFixedShared + Clone {}
impl<T: CodecFixedShared + Clone> FixedValue for T {}
pub trait VariableValue: CodecShared + Clone {}
impl<T: CodecShared + Clone> VariableValue for T {}