#[cfg(not(feature = "std"))]
use alloc::vec::Vec;
#[derive(Debug, Clone, Copy, Default, Eq, PartialEq)]
pub enum ColumnEncoding {
#[default]
Plain,
Auto,
}
#[derive(Debug, Clone, Eq, PartialEq)]
pub struct ColumnEncodingPolicy(Vec<ColumnEncoding>);
impl core::ops::Deref for ColumnEncodingPolicy {
type Target = [ColumnEncoding];
fn deref(&self) -> &Self::Target {
&self.0
}
}
impl Default for ColumnEncodingPolicy {
fn default() -> Self {
Self::all(ColumnEncoding::Plain)
}
}
impl ColumnEncodingPolicy {
pub(crate) fn get(&self, level: usize) -> ColumnEncoding {
#[expect(clippy::expect_used, reason = "policy is expected not to be empty")]
self.0
.get(level)
.copied()
.unwrap_or_else(|| self.last().copied().expect("policy should not be empty"))
}
#[must_use]
pub fn all(encoding: ColumnEncoding) -> Self {
Self(vec![encoding])
}
#[must_use]
pub fn new(policy: impl Into<Vec<ColumnEncoding>>) -> Self {
let policy = policy.into();
assert!(
!policy.is_empty(),
"column encoding policy may not be empty"
);
assert!(policy.len() <= 255, "column encoding policy is too large");
Self(policy)
}
}