#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
pub enum Codec {
#[default]
Zstd,
Lz4,
Uncompressed,
}
#[derive(Debug, Clone, Copy, Default, PartialEq, Eq)]
pub enum MetaFormat {
#[default]
Json,
MsgPack,
}
impl MetaFormat {
pub(crate) const fn filename(self, compression: Codec) -> &'static str {
match (self, compression) {
(MetaFormat::Json, Codec::Uncompressed) => "atlas.json",
(MetaFormat::Json, Codec::Zstd) => "atlas.json.zst",
(MetaFormat::Json, Codec::Lz4) => "atlas.json.lz4",
(MetaFormat::MsgPack, Codec::Uncompressed) => "atlas.msgpack",
(MetaFormat::MsgPack, Codec::Zstd) => "atlas.msgpack.zst",
(MetaFormat::MsgPack, Codec::Lz4) => "atlas.msgpack.lz4",
}
}
}
pub(crate) const META_VARIANTS: [(MetaFormat, Codec); 6] = [
(MetaFormat::Json, Codec::Uncompressed),
(MetaFormat::Json, Codec::Zstd),
(MetaFormat::Json, Codec::Lz4),
(MetaFormat::MsgPack, Codec::Uncompressed),
(MetaFormat::MsgPack, Codec::Zstd),
(MetaFormat::MsgPack, Codec::Lz4),
];
#[derive(Debug, Clone)]
pub struct StoreConfig {
pub codec: Codec,
pub meta_format: MetaFormat,
pub meta_compression: Codec,
}
impl Default for StoreConfig {
fn default() -> Self {
Self {
codec: Codec::default(),
meta_format: MetaFormat::default(),
meta_compression: Codec::Uncompressed,
}
}
}