Skip to main content

EncodingStrategy

Trait EncodingStrategy 

Source
pub trait EncodingStrategy<T> {
    type Context: Default + Clone;

    // Required methods
    fn encode<E: EntropyCoder>(
        value: &T,
        writer: &mut E,
        ctx: &mut Self::Context,
    );
    fn decode<D: EntropyDecoder>(
        reader: &mut D,
        ctx: &mut Self::Context,
    ) -> Result<T, Error>;
}
Expand description

An encoding strategy for type T.

You can implement this for your own types, if you want them to support e.g. Small encodings. But I expect this to be unusual. It would be possible to create a Derive macro for this, but I don’t think it is needed. If you want such a macro file an issue.

Note that besides implementing existing strategies for your own types, you can also create entirely new strategies in your crates. If you do that, you can use full paths in your derive macros, e.g. #[compactly(your_crate::SuperCoolEncodingStratgy].

Required Associated Types§

Source

type Context: Default + Clone

The conext (i.e. probability model) for this encoding strategy applied to this type.

Required Methods§

Source

fn encode<E: EntropyCoder>(value: &T, writer: &mut E, ctx: &mut Self::Context)

Encode the value with this strategy.

Source

fn decode<D: EntropyDecoder>( reader: &mut D, ctx: &mut Self::Context, ) -> Result<T, Error>

Decode the value using this strategy.

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.

Implementors§

Source§

impl EncodingStrategy<Option<u64>> for Small

Source§

type Context = OptionContext<u64, Small>

Source§

impl EncodingStrategy<Option<usize>> for Small

Source§

type Context = OptionContext<usize, Small>

Source§

impl EncodingStrategy<Option<String>> for Compressible

Source§

type Context = OptionContext<String, Compressible>

Source§

impl EncodingStrategy<bool> for Sorted

Source§

type Context = BitContext

Source§

impl EncodingStrategy<f32> for Decimal

Source§

type Context = F32Decimal

Source§

impl EncodingStrategy<f64> for Decimal

Source§

type Context = F64Decimal

Source§

impl EncodingStrategy<i16> for Small

Source§

type Context = Context

Source§

impl EncodingStrategy<i16> for Sorted

Source§

type Context = SortedContext

Source§

impl EncodingStrategy<i32> for Small

Source§

type Context = Context

Source§

impl EncodingStrategy<i32> for Sorted

Source§

type Context = SortedContext

Source§

impl EncodingStrategy<i64> for Small

Source§

type Context = Context

Source§

impl EncodingStrategy<i64> for Sorted

Source§

type Context = SortedContext

Source§

impl EncodingStrategy<u8> for Incompressible

Source§

impl EncodingStrategy<u8> for Small

Source§

type Context = SmallContext

Source§

impl EncodingStrategy<u16> for Incompressible

Source§

impl EncodingStrategy<u16> for Small

Source§

type Context = U16Compact

Source§

impl EncodingStrategy<u16> for Sorted

Source§

type Context = SortedContext

Source§

impl EncodingStrategy<u32> for Incompressible

Source§

impl EncodingStrategy<u32> for Small

Source§

type Context = U32Compact

Source§

impl EncodingStrategy<u32> for Sorted

Source§

type Context = SortedContext

Source§

impl EncodingStrategy<u64> for Incompressible

Source§

impl EncodingStrategy<u64> for LowCardinality

Source§

type Context = CacheContext<u64>

Source§

impl EncodingStrategy<u64> for Small

Source§

type Context = U64Compact

Source§

impl EncodingStrategy<u64> for Sorted

Source§

type Context = SortedContext

Source§

impl EncodingStrategy<usize> for Small

Source§

type Context = SmallContext

Source§

impl EncodingStrategy<usize> for Sorted

Source§

type Context = SortedContext

Source§

impl EncodingStrategy<BTreeSet<u64>> for Small

Source§

type Context = CompactU64Set

Source§

impl EncodingStrategy<String> for Compressible

Source§

type Context = Lz77

Source§

impl EncodingStrategy<String> for LowCardinality

Source§

type Context = CacheContext<String>

Source§

impl EncodingStrategy<String> for Sorted

Source§

type Context = SortedContext

Source§

impl EncodingStrategy<Vec<u8>> for Compressible

Source§

type Context = Lz77

Source§

impl EncodingStrategy<Vec<u8>> for Incompressible

Source§

impl EncodingStrategy<Vec<u8>> for LowCardinality

Source§

type Context = CacheContext<Vec<u8>>

Source§

impl<K: Ord, SK: EncodingStrategy<K>, V, SV: EncodingStrategy<V>> EncodingStrategy<BTreeMap<K, V>> for Mapping<SK, SV>

Source§

type Context = MapContext<K, V, SK, SV>

Source§

impl<K: Hash + Eq, SK: EncodingStrategy<K>, V, SV: EncodingStrategy<V>> EncodingStrategy<HashMap<K, V>> for Mapping<SK, SV>

Source§

type Context = MapContext<K, V, SK, SV>

Source§

impl<T> EncodingStrategy<Option<T>> for LowCardinality

Source§

impl<T> EncodingStrategy<Vec<T>> for LowCardinality

Source§

impl<T, S: EncodingStrategy<T>> EncodingStrategy<Box<[T]>> for Values<S>

Source§

type Context = Context<T, S>

Source§

impl<T, S: EncodingStrategy<T>> EncodingStrategy<Vec<T>> for Values<S>

Source§

type Context = Context<T, S>

Source§

impl<T: Ord, S: EncodingStrategy<T>> EncodingStrategy<BTreeSet<T>> for Values<S>

Source§

type Context = SetContext<T, S>

Source§

impl<T: Hash + Eq, S: EncodingStrategy<T>> EncodingStrategy<HashSet<T>> for Values<S>

Source§

type Context = SetContext<T, S>

Source§

impl<T: Encode + Clone + Eq> EncodingStrategy<Vec<T>> for Sorted

Source§

type Context = SortedContext<T>

Source§

impl<T: Encode> EncodingStrategy<T> for Normal