#![deny(missing_docs)]
use crate::{Error, ErrorKind, Result};
mod blob;
pub use blob::{APACHE_DATASKETCHES_THETA_V1, Blob, DELETION_VECTOR_V1};
pub use crate::compression::CompressionCodec;
const SUPPORTED_PUFFIN_CODECS: &[CompressionCodec] = &[
CompressionCodec::None,
CompressionCodec::Lz4,
CompressionCodec::Zstd,
];
fn validate_puffin_compression(codec: CompressionCodec) -> Result<()> {
if !SUPPORTED_PUFFIN_CODECS.contains(&codec) {
let supported_names: Vec<String> = SUPPORTED_PUFFIN_CODECS
.iter()
.map(|c| format!("{c:?}"))
.collect();
return Err(Error::new(
ErrorKind::DataInvalid,
format!(
"Compression codec {codec:?} is not supported for Puffin files. Only {} are supported.",
supported_names.join(", ")
),
));
}
Ok(())
}
mod metadata;
pub use metadata::{BlobMetadata, CREATED_BY_PROPERTY, FileMetadata};
mod reader;
pub use reader::PuffinReader;
mod writer;
pub use writer::PuffinWriter;
#[cfg(test)]
mod test_utils;
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_puffin_codec_validation() {
for codec in SUPPORTED_PUFFIN_CODECS {
assert!(validate_puffin_compression(*codec).is_ok());
}
assert!(validate_puffin_compression(CompressionCodec::Gzip).is_err());
}
}