diff --git a/src/array/codec/bytes_to_bytes/blosc.rs b/src/array/codec/bytes_to_bytes/blosc.rs index 7ed4a4df..1e1952d8 100644 --- a/src/array/codec/bytes_to_bytes/blosc.rs +++ b/src/array/codec/bytes_to_bytes/blosc.rs @@ -67,6 +67,17 @@ impl From<&str> for BloscError { } } +const fn compressor_as_cstr(compressor: BloscCompressor) -> *const u8 { + match compressor { + BloscCompressor::BloscLZ => blosc_sys::BLOSC_BLOSCLZ_COMPNAME.as_ptr(), + BloscCompressor::LZ4 => blosc_sys::BLOSC_LZ4_COMPNAME.as_ptr(), + BloscCompressor::LZ4HC => blosc_sys::BLOSC_LZ4HC_COMPNAME.as_ptr(), + BloscCompressor::Snappy => blosc_sys::BLOSC_SNAPPY_COMPNAME.as_ptr(), + BloscCompressor::Zlib => blosc_sys::BLOSC_ZLIB_COMPNAME.as_ptr(), + BloscCompressor::Zstd => blosc_sys::BLOSC_ZSTD_COMPNAME.as_ptr(), + } +} + fn blosc_compress_bytes( src: &[u8], clevel: BloscCompressionLevel, @@ -95,7 +106,7 @@ fn blosc_compress_bytes( src.as_ptr().cast::(), dest.as_mut_ptr().cast::(), destsize, - compressor.as_cstr().cast::(), + compressor_as_cstr(compressor).cast::(), blocksize, i32::try_from(numinternalthreads).unwrap(), ) diff --git a/src/array/codec/bytes_to_bytes/blosc/blosc_codec.rs b/src/array/codec/bytes_to_bytes/blosc/blosc_codec.rs index 920bf8f2..b0327e11 100644 --- a/src/array/codec/bytes_to_bytes/blosc/blosc_codec.rs +++ b/src/array/codec/bytes_to_bytes/blosc/blosc_codec.rs @@ -19,8 +19,8 @@ use crate::array::codec::AsyncBytesPartialDecoderTraits; use super::{ blosc_compress_bytes, blosc_decompress_bytes, blosc_partial_decoder, blosc_validate, - BloscCodecConfiguration, BloscCodecConfigurationV1, BloscCompressionLevel, BloscCompressor, - BloscError, BloscShuffleMode, IDENTIFIER, + compressor_as_cstr, BloscCodecConfiguration, BloscCodecConfigurationV1, BloscCompressionLevel, + BloscCompressor, BloscError, BloscShuffleMode, IDENTIFIER, }; /// A `blosc` codec implementation. @@ -62,7 +62,7 @@ impl BloscCodec { // Check that the compressor is available let support = unsafe { blosc_get_complib_info( - cname.as_cstr().cast::(), + compressor_as_cstr(cname).cast::(), std::ptr::null_mut(), std::ptr::null_mut(), ) diff --git a/src/metadata/v3/array/codec/blosc.rs b/src/metadata/v3/array/codec/blosc.rs index e40ae9a1..126c46c5 100644 --- a/src/metadata/v3/array/codec/blosc.rs +++ b/src/metadata/v3/array/codec/blosc.rs @@ -73,20 +73,6 @@ pub enum BloscCompressor { Zstd, } -#[cfg(feature = "blosc")] -impl BloscCompressor { - pub(crate) const fn as_cstr(&self) -> *const u8 { - match self { - Self::BloscLZ => blosc_sys::BLOSC_BLOSCLZ_COMPNAME.as_ptr(), - Self::LZ4 => blosc_sys::BLOSC_LZ4_COMPNAME.as_ptr(), - Self::LZ4HC => blosc_sys::BLOSC_LZ4HC_COMPNAME.as_ptr(), - Self::Snappy => blosc_sys::BLOSC_SNAPPY_COMPNAME.as_ptr(), - Self::Zlib => blosc_sys::BLOSC_ZLIB_COMPNAME.as_ptr(), - Self::Zstd => blosc_sys::BLOSC_ZSTD_COMPNAME.as_ptr(), - } - } -} - /// A wrapper to handle various versions of `blosc` codec configuration parameters. #[derive(Serialize, Deserialize, Clone, Eq, PartialEq, Debug, Display, From)] #[serde(untagged)]