use bitvec::prelude::*;
use serde::{de::DeserializeOwned, Serialize};
use crate::sample::{Label, Sample};
mod permute;
mod slice;
mod therm;
pub use permute::*;
pub use slice::*;
pub use therm::*;
pub trait SampleEncoder<L, T, O>
where
L: Label,
T: BitStore + DeserializeOwned,
T::Mem: Serialize,
O: BitOrder,
{
fn encode_inplace(&self, sample: &mut Sample<L, T, O>);
fn encode(&self, mut sample: Sample<L, T, O>) -> Sample<L, T, O> {
self.encode_inplace(&mut sample);
sample
}
}