1pub use float::FloatEncoderConfig;
4pub use int::IntEncoderConfig;
5pub use length::LengthEncoderConfig;
6
7mod float;
8mod int;
9mod length;
10
11#[cfg_attr(any(test, feature = "testing"), derive(proptest_derive::Arbitrary))]
13#[derive(Default, Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash, Debug)]
14#[repr(u8)]
15pub enum PackingMode {
16 None = 0,
18 Native = 1,
20 #[default]
22 Optimal = 2,
23}
24
25impl PackingMode {
26 pub(crate) fn is_optimal(self) -> bool {
27 self == Self::Optimal
28 }
29}
30
31#[cfg_attr(any(test, feature = "testing"), derive(proptest_derive::Arbitrary))]
33#[derive(Default, Clone, PartialEq, Debug)]
34pub struct EncoderConfig {
35 pub lengths: LengthEncoderConfig,
37 pub ints: IntEncoderConfig,
39 pub floats: FloatEncoderConfig,
41}
42
43impl EncoderConfig {
44 pub fn with_packing(mut self, packing: PackingMode) -> Self {
46 self.lengths = self.lengths.with_packing(packing);
47 self.ints = self.ints.with_packing(packing);
48 self.floats = self.floats.with_packing(packing);
49 self
50 }
51}
52
53#[cfg_attr(any(test, feature = "testing"), derive(proptest_derive::Arbitrary))]
55#[derive(Default, Copy, Clone, Eq, PartialEq, Hash, Debug)]
56pub struct DecoderConfig {}