#![doc = include_str!("../../doc/status/codecs.md")]
pub mod array_to_array;
pub mod array_to_bytes;
pub mod bytes_to_bytes;
use std::sync::Arc;
#[cfg(feature = "bitround")]
pub use array_to_array::bitround::*;
pub use array_to_array::fixedscaleoffset::*;
pub use array_to_array::reshape::*;
pub use array_to_array::squeeze::*;
#[cfg(feature = "transpose")]
pub use array_to_array::transpose::*;
pub use array_to_bytes::bytes::*;
pub use array_to_bytes::codec_chain::CodecChain;
pub use array_to_bytes::optional::*;
pub use array_to_bytes::packbits::*;
#[cfg(feature = "pcodec")]
pub use array_to_bytes::pcodec::*;
#[cfg(feature = "sharding")]
pub use array_to_bytes::sharding::*;
pub use array_to_bytes::vlen::*;
pub use array_to_bytes::vlen_array::*;
pub use array_to_bytes::vlen_bytes::*;
pub use array_to_bytes::vlen_utf8::*;
pub use array_to_bytes::vlen_v2::*;
#[cfg(feature = "zfp")]
pub use array_to_bytes::zfp::*;
#[cfg(feature = "zfp")]
pub use array_to_bytes::zfpy::*;
#[cfg(feature = "adler32")]
pub use bytes_to_bytes::adler32::*;
#[cfg(feature = "blosc")]
pub use bytes_to_bytes::blosc::*;
#[cfg(feature = "bz2")]
pub use bytes_to_bytes::bz2::*;
#[cfg(feature = "crc32c")]
pub use bytes_to_bytes::crc32c::*;
#[cfg(feature = "fletcher32")]
pub use bytes_to_bytes::fletcher32::*;
#[cfg(feature = "gdeflate")]
pub use bytes_to_bytes::gdeflate::*;
#[cfg(feature = "gzip")]
pub use bytes_to_bytes::gzip::*;
pub use bytes_to_bytes::shuffle::*;
#[cfg(feature = "zlib")]
pub use bytes_to_bytes::zlib::*;
#[cfg(feature = "zstd")]
pub use bytes_to_bytes::zstd::*;
mod array_partial_decoder_cache;
mod bytes_partial_decoder_cache;
pub(crate) use array_partial_decoder_cache::ArrayPartialDecoderCache;
pub(crate) use bytes_partial_decoder_cache::BytesPartialDecoderCache;
pub use zarrs_codec as api;
#[must_use]
pub fn default_array_to_bytes_codec(
data_type: &zarrs_data_type::DataType,
) -> Arc<dyn zarrs_codec::ArrayToBytesCodecTraits> {
if let Some(opt) = data_type.as_optional() {
let mask_codec_chain = Arc::new(CodecChain::new(
vec![],
Arc::new(PackBitsCodec::default()),
vec![],
));
let data_codec_chain = Arc::new(CodecChain::new(
vec![],
default_array_to_bytes_codec(opt.data_type()), vec![],
));
return Arc::new(array_to_bytes::optional::OptionalCodec::new(
mask_codec_chain,
data_codec_chain,
));
}
if data_type.is_fixed() {
Arc::<BytesCodec>::default()
} else {
use std::any::TypeId;
let type_id = data_type.as_any().type_id();
if type_id == TypeId::of::<crate::array::data_type::StringDataType>() {
Arc::new(VlenUtf8Codec::new())
} else if type_id == TypeId::of::<crate::array::data_type::BytesDataType>() {
Arc::new(VlenBytesCodec::new())
} else {
Arc::new(VlenCodec::default())
}
}
}