1#![deny(missing_docs)]
21
22use crate::Result;
23use crate::error::invalid_data;
24
25mod blob;
26pub use blob::{APACHE_DATASKETCHES_THETA_V1, Blob, DELETION_VECTOR_V1};
27
28pub use crate::compression::CompressionCodec;
29
30fn validate_puffin_compression(codec: CompressionCodec) -> Result<()> {
33 match codec {
34 CompressionCodec::None | CompressionCodec::Lz4 | CompressionCodec::Zstd(_) => Ok(()),
35 other => Err(invalid_data!(
36 "Compression codec {} is not supported for Puffin files. Only {}, {}, and {} are supported.",
37 other.name(),
38 CompressionCodec::None.name(),
39 CompressionCodec::Lz4.name(),
40 CompressionCodec::zstd_default().name()
41 )),
42 }
43}
44
45mod metadata;
46pub use metadata::{BlobMetadata, CREATED_BY_PROPERTY, FileMetadata};
47
48mod reader;
49pub use reader::PuffinReader;
50
51mod writer;
52pub use writer::PuffinWriter;
53
54#[cfg(test)]
55mod test_utils;
56
57#[cfg(test)]
58mod tests {
59 use super::*;
60
61 #[test]
62 fn test_puffin_codec_validation() {
63 assert!(validate_puffin_compression(CompressionCodec::None).is_ok());
65 assert!(validate_puffin_compression(CompressionCodec::Lz4).is_ok());
66 assert!(validate_puffin_compression(CompressionCodec::zstd_default()).is_ok());
67 assert!(validate_puffin_compression(CompressionCodec::Zstd(5)).is_ok());
68
69 assert!(validate_puffin_compression(CompressionCodec::gzip_default()).is_err());
71 }
72}