diff --git a/zarrs/src/array.rs b/zarrs/src/array.rs index c85aff98..e810b4dd 100644 --- a/zarrs/src/array.rs +++ b/zarrs/src/array.rs @@ -603,7 +603,7 @@ impl Array { // Codec metadata manipulation match &mut metadata { ArrayMetadata::V3(metadata) => { - metadata.codecs = self.codecs().create_metadatas_opt(options); + metadata.codecs = self.codecs().create_metadatas_opt(options.codec_options()); } ArrayMetadata::V2(_metadata) => { // NOTE: The codec related options in ArrayMetadataOptions do not impact V2 codecs diff --git a/zarrs/src/array/array_metadata_options.rs b/zarrs/src/array/array_metadata_options.rs index 2ec189a0..e0dafc36 100644 --- a/zarrs/src/array/array_metadata_options.rs +++ b/zarrs/src/array/array_metadata_options.rs @@ -1,9 +1,11 @@ use crate::config::{global_config, MetadataConvertVersion}; +use super::codec::CodecMetadataOptions; + /// Options for writing array metadata. #[derive(Debug, Clone)] pub struct ArrayMetadataOptions { - experimental_codec_store_metadata_if_encode_only: bool, + codec_options: CodecMetadataOptions, convert_version: MetadataConvertVersion, include_zarrs_metadata: bool, } @@ -11,7 +13,7 @@ pub struct ArrayMetadataOptions { impl Default for ArrayMetadataOptions { fn default() -> Self { Self { - experimental_codec_store_metadata_if_encode_only: false, + codec_options: CodecMetadataOptions::default(), convert_version: global_config().metadata_convert_version(), include_zarrs_metadata: global_config().include_zarrs_metadata(), } @@ -19,26 +21,16 @@ impl Default for ArrayMetadataOptions { } impl ArrayMetadataOptions { - /// Return the [experimental codec store metadata if encode only](crate::config::Config#experimental-codec-store-metadata-if-encode-only) setting. + /// Return the codec options. #[must_use] - pub fn experimental_codec_store_metadata_if_encode_only(&self) -> bool { - self.experimental_codec_store_metadata_if_encode_only + pub fn codec_options(&self) -> &CodecMetadataOptions { + &self.codec_options } - /// Set the [experimental codec store metadata if encode only](crate::config::Config#experimental-codec-store-metadata-if-encode-only) setting. + /// Return a mutable reference to the codec options. #[must_use] - pub fn with_experimental_codec_store_metadata_if_encode_only(mut self, enabled: bool) -> Self { - self.experimental_codec_store_metadata_if_encode_only = enabled; - self - } - - /// Set the [experimental codec store metadata if encode only](crate::config::Config#experimental-codec-store-metadata-if-encode-only) setting. - pub fn set_experimental_codec_store_metadata_if_encode_only( - &mut self, - enabled: bool, - ) -> &mut Self { - self.experimental_codec_store_metadata_if_encode_only = enabled; - self + pub fn codec_options_mut(&mut self) -> &mut CodecMetadataOptions { + &mut self.codec_options } /// Get the [metadata convert version](crate::config::Config#metadata-convert-version) configuration. diff --git a/zarrs/src/array/codec.rs b/zarrs/src/array/codec.rs index 12d09bb7..5f4278fa 100644 --- a/zarrs/src/array/codec.rs +++ b/zarrs/src/array/codec.rs @@ -13,8 +13,10 @@ pub mod array_to_array; pub mod array_to_bytes; pub mod bytes_to_bytes; +pub mod metadata_options; pub mod options; +pub use metadata_options::CodecMetadataOptions; pub use options::{CodecOptions, CodecOptionsBuilder}; // Array to array @@ -96,8 +98,8 @@ use std::sync::Arc; use super::array_bytes::update_bytes_flen; use super::{ - concurrency::RecommendedConcurrency, ArrayMetadataOptions, BytesRepresentation, - ChunkRepresentation, ChunkShape, DataType, + concurrency::RecommendedConcurrency, BytesRepresentation, ChunkRepresentation, ChunkShape, + DataType, }; use super::{ArrayBytes, RawBytes}; @@ -199,13 +201,13 @@ pub trait CodecTraits: Send + Sync { /// Create metadata. /// /// A hidden codec (e.g. a cache) will return [`None`], since it will not have any associated metadata. - fn create_metadata_opt(&self, options: &ArrayMetadataOptions) -> Option; + fn create_metadata_opt(&self, options: &CodecMetadataOptions) -> Option; /// Create metadata with default options. /// /// A hidden codec (e.g. a cache) will return [`None`], since it will not have any associated metadata. fn create_metadata(&self) -> Option { - self.create_metadata_opt(&ArrayMetadataOptions::default()) + self.create_metadata_opt(&CodecMetadataOptions::default()) } /// Indicates if the input to a codecs partial decoder should be cached for optimal performance. diff --git a/zarrs/src/array/codec/array_to_array/bitround/bitround_codec.rs b/zarrs/src/array/codec/array_to_array/bitround/bitround_codec.rs index 51c8249f..fc288375 100644 --- a/zarrs/src/array/codec/array_to_array/bitround/bitround_codec.rs +++ b/zarrs/src/array/codec/array_to_array/bitround/bitround_codec.rs @@ -5,9 +5,9 @@ use crate::{ codec::{ options::CodecOptions, ArrayBytes, ArrayCodecTraits, ArrayPartialDecoderTraits, ArrayPartialEncoderTraits, ArrayToArrayCodecTraits, ArrayToArrayPartialEncoderDefault, - CodecError, CodecTraits, RecommendedConcurrency, + CodecError, CodecMetadataOptions, CodecTraits, RecommendedConcurrency, }, - ArrayMetadataOptions, ChunkRepresentation, ChunkShape, DataType, + ChunkRepresentation, ChunkShape, DataType, }, config::global_config, metadata::v3::MetadataV3, @@ -47,7 +47,7 @@ impl BitroundCodec { } impl CodecTraits for BitroundCodec { - fn create_metadata_opt(&self, options: &ArrayMetadataOptions) -> Option { + fn create_metadata_opt(&self, options: &CodecMetadataOptions) -> Option { if options.experimental_codec_store_metadata_if_encode_only() { let configuration = BitroundCodecConfigurationV1 { keepbits: self.keepbits, diff --git a/zarrs/src/array/codec/array_to_array/transpose/transpose_codec.rs b/zarrs/src/array/codec/array_to_array/transpose/transpose_codec.rs index 1ac8a968..85032f30 100644 --- a/zarrs/src/array/codec/array_to_array/transpose/transpose_codec.rs +++ b/zarrs/src/array/codec/array_to_array/transpose/transpose_codec.rs @@ -5,9 +5,9 @@ use crate::{ codec::{ options::CodecOptions, ArrayBytes, ArrayCodecTraits, ArrayPartialDecoderTraits, ArrayPartialEncoderTraits, ArrayToArrayCodecTraits, ArrayToArrayPartialEncoderDefault, - CodecError, CodecTraits, RecommendedConcurrency, + CodecError, CodecMetadataOptions, CodecTraits, RecommendedConcurrency, }, - ArrayMetadataOptions, ChunkRepresentation, ChunkShape, + ChunkRepresentation, ChunkShape, }, metadata::v3::{array::codec::transpose::TransposeCodecConfigurationV1, MetadataV3}, plugin::PluginCreateError, @@ -48,7 +48,7 @@ impl TransposeCodec { } impl CodecTraits for TransposeCodec { - fn create_metadata_opt(&self, _options: &ArrayMetadataOptions) -> Option { + fn create_metadata_opt(&self, _options: &CodecMetadataOptions) -> Option { let configuration = TransposeCodecConfigurationV1 { order: self.order.clone(), }; diff --git a/zarrs/src/array/codec/array_to_bytes/bytes/bytes_codec.rs b/zarrs/src/array/codec/array_to_bytes/bytes/bytes_codec.rs index f6cff4a3..ce379a00 100644 --- a/zarrs/src/array/codec/array_to_bytes/bytes/bytes_codec.rs +++ b/zarrs/src/array/codec/array_to_bytes/bytes/bytes_codec.rs @@ -7,11 +7,10 @@ use crate::{ codec::{ ArrayCodecTraits, ArrayPartialDecoderTraits, ArrayPartialEncoderDefault, ArrayPartialEncoderTraits, ArrayToBytesCodecTraits, BytesPartialDecoderTraits, - BytesPartialEncoderTraits, CodecError, CodecOptions, CodecTraits, + BytesPartialEncoderTraits, CodecError, CodecMetadataOptions, CodecOptions, CodecTraits, RecommendedConcurrency, }, - ArrayBytes, ArrayMetadataOptions, BytesRepresentation, ChunkRepresentation, DataTypeSize, - RawBytes, + ArrayBytes, BytesRepresentation, ChunkRepresentation, DataTypeSize, RawBytes, }, metadata::v3::MetadataV3, }; @@ -101,7 +100,7 @@ impl BytesCodec { } impl CodecTraits for BytesCodec { - fn create_metadata_opt(&self, _options: &ArrayMetadataOptions) -> Option { + fn create_metadata_opt(&self, _options: &CodecMetadataOptions) -> Option { let configuration = BytesCodecConfigurationV1 { endian: self.endian, }; diff --git a/zarrs/src/array/codec/array_to_bytes/codec_chain.rs b/zarrs/src/array/codec/array_to_bytes/codec_chain.rs index be8fae6a..804b683f 100644 --- a/zarrs/src/array/codec/array_to_bytes/codec_chain.rs +++ b/zarrs/src/array/codec/array_to_bytes/codec_chain.rs @@ -11,11 +11,11 @@ use crate::{ ArrayCodecTraits, ArrayPartialDecoderCache, ArrayPartialDecoderTraits, ArrayPartialEncoderTraits, ArrayToArrayCodecTraits, ArrayToBytesCodecTraits, BytesPartialDecoderCache, BytesPartialDecoderTraits, BytesPartialEncoderTraits, - BytesToBytesCodecTraits, Codec, CodecError, CodecOptions, CodecTraits, + BytesToBytesCodecTraits, Codec, CodecError, CodecMetadataOptions, CodecOptions, + CodecTraits, }, concurrency::RecommendedConcurrency, - ArrayBytes, ArrayMetadataOptions, BytesRepresentation, ChunkRepresentation, ChunkShape, - RawBytes, + ArrayBytes, BytesRepresentation, ChunkRepresentation, ChunkShape, RawBytes, }, array_subset::ArraySubset, metadata::v3::MetadataV3, @@ -137,7 +137,7 @@ impl CodecChain { /// Create codec chain metadata. #[must_use] - pub fn create_metadatas_opt(&self, options: &ArrayMetadataOptions) -> Vec { + pub fn create_metadatas_opt(&self, options: &CodecMetadataOptions) -> Vec { let mut metadatas = Vec::with_capacity(self.array_to_array.len() + 1 + self.bytes_to_bytes.len()); for codec in &self.array_to_array { @@ -159,7 +159,7 @@ impl CodecChain { /// Create codec chain metadata with default options. #[must_use] pub fn create_metadatas(&self) -> Vec { - self.create_metadatas_opt(&ArrayMetadataOptions::default()) + self.create_metadatas_opt(&CodecMetadataOptions::default()) } /// Get the array to array codecs @@ -215,7 +215,7 @@ impl CodecTraits for CodecChain { /// Returns [`None`] since a codec chain does not have standard codec metadata. /// /// Note that usage of the codec chain is explicit in [`Array`](crate::array::Array) and [`CodecChain::create_metadatas_opt()`] will call [`CodecTraits::create_metadata_opt()`] from for each codec. - fn create_metadata_opt(&self, _options: &ArrayMetadataOptions) -> Option { + fn create_metadata_opt(&self, _options: &CodecMetadataOptions) -> Option { None } diff --git a/zarrs/src/array/codec/array_to_bytes/pcodec/pcodec_codec.rs b/zarrs/src/array/codec/array_to_bytes/pcodec/pcodec_codec.rs index 10c9f6db..94b47549 100644 --- a/zarrs/src/array/codec/array_to_bytes/pcodec/pcodec_codec.rs +++ b/zarrs/src/array/codec/array_to_bytes/pcodec/pcodec_codec.rs @@ -10,11 +10,11 @@ use crate::{ codec::{ ArrayBytes, ArrayCodecTraits, ArrayPartialDecoderTraits, ArrayPartialEncoderDefault, ArrayPartialEncoderTraits, ArrayToBytesCodecTraits, BytesPartialDecoderTraits, - BytesPartialEncoderTraits, CodecError, CodecOptions, CodecTraits, RawBytes, - RecommendedConcurrency, + BytesPartialEncoderTraits, CodecError, CodecMetadataOptions, CodecOptions, CodecTraits, + RawBytes, RecommendedConcurrency, }, - convert_from_bytes_slice, transmute_to_bytes_vec, ArrayMetadataOptions, - BytesRepresentation, ChunkRepresentation, DataType, + convert_from_bytes_slice, transmute_to_bytes_vec, BytesRepresentation, ChunkRepresentation, + DataType, }, config::global_config, metadata::v3::{array::codec::pcodec::PcodecModeSpecConfiguration, MetadataV3}, @@ -84,7 +84,7 @@ impl PcodecCodec { } impl CodecTraits for PcodecCodec { - fn create_metadata_opt(&self, _options: &ArrayMetadataOptions) -> Option { + fn create_metadata_opt(&self, _options: &CodecMetadataOptions) -> Option { let mode_spec = mode_spec_pco_to_config(&self.chunk_config.mode_spec); let (delta_spec, delta_encoding_order) = match self.chunk_config.delta_spec { DeltaSpec::Auto => (PcodecDeltaSpecConfiguration::Auto, None), diff --git a/zarrs/src/array/codec/array_to_bytes/sharding/sharding_codec.rs b/zarrs/src/array/codec/array_to_bytes/sharding/sharding_codec.rs index f6ec782f..f432cc02 100644 --- a/zarrs/src/array/codec/array_to_bytes/sharding/sharding_codec.rs +++ b/zarrs/src/array/codec/array_to_bytes/sharding/sharding_codec.rs @@ -11,11 +11,12 @@ use crate::{ codec::{ ArrayCodecTraits, ArrayPartialDecoderTraits, ArrayPartialEncoderTraits, ArrayToBytesCodecTraits, BytesPartialDecoderTraits, BytesPartialEncoderTraits, - CodecChain, CodecError, CodecOptions, CodecTraits, RecommendedConcurrency, + CodecChain, CodecError, CodecMetadataOptions, CodecOptions, CodecTraits, + RecommendedConcurrency, }, concurrency::calc_concurrency_outer_inner, - transmute_to_bytes_vec, unravel_index, ArrayBytes, ArrayMetadataOptions, ArraySize, - BytesRepresentation, ChunkRepresentation, ChunkShape, DataTypeSize, FillValue, RawBytes, + transmute_to_bytes_vec, unravel_index, ArrayBytes, ArraySize, BytesRepresentation, + ChunkRepresentation, ChunkShape, DataTypeSize, FillValue, RawBytes, }, array_subset::ArraySubset, metadata::v3::MetadataV3, @@ -85,7 +86,7 @@ impl ShardingCodec { } impl CodecTraits for ShardingCodec { - fn create_metadata_opt(&self, _options: &ArrayMetadataOptions) -> Option { + fn create_metadata_opt(&self, _options: &CodecMetadataOptions) -> Option { let configuration = ShardingCodecConfigurationV1 { chunk_shape: self.chunk_shape.clone(), codecs: self.inner_codecs.create_metadatas(), diff --git a/zarrs/src/array/codec/array_to_bytes/vlen/vlen_codec.rs b/zarrs/src/array/codec/array_to_bytes/vlen/vlen_codec.rs index 18d389f7..cc3c44e2 100644 --- a/zarrs/src/array/codec/array_to_bytes/vlen/vlen_codec.rs +++ b/zarrs/src/array/codec/array_to_bytes/vlen/vlen_codec.rs @@ -5,11 +5,11 @@ use crate::{ codec::{ ArrayCodecTraits, ArrayPartialDecoderTraits, ArrayPartialEncoderDefault, ArrayPartialEncoderTraits, ArrayToBytesCodecTraits, BytesCodec, - BytesPartialDecoderTraits, BytesPartialEncoderTraits, CodecError, CodecOptions, - CodecTraits, RecommendedConcurrency, + BytesPartialDecoderTraits, BytesPartialEncoderTraits, CodecError, CodecMetadataOptions, + CodecOptions, CodecTraits, RecommendedConcurrency, }, - transmute_to_bytes_vec, ArrayBytes, ArrayMetadataOptions, BytesRepresentation, - ChunkRepresentation, CodecChain, DataType, DataTypeSize, Endianness, FillValue, RawBytes, + transmute_to_bytes_vec, ArrayBytes, BytesRepresentation, ChunkRepresentation, CodecChain, + DataType, DataTypeSize, Endianness, FillValue, RawBytes, }, config::global_config, metadata::v3::{array::codec::vlen::VlenIndexDataType, MetadataV3}, @@ -83,7 +83,7 @@ impl VlenCodec { } impl CodecTraits for VlenCodec { - fn create_metadata_opt(&self, _options: &ArrayMetadataOptions) -> Option { + fn create_metadata_opt(&self, _options: &CodecMetadataOptions) -> Option { let configuration = VlenCodecConfigurationV1 { index_codecs: self.index_codecs.create_metadatas(), data_codecs: self.data_codecs.create_metadatas(), diff --git a/zarrs/src/array/codec/array_to_bytes/vlen_v2/vlen_v2_codec.rs b/zarrs/src/array/codec/array_to_bytes/vlen_v2/vlen_v2_codec.rs index dec590c9..def1a44d 100644 --- a/zarrs/src/array/codec/array_to_bytes/vlen_v2/vlen_v2_codec.rs +++ b/zarrs/src/array/codec/array_to_bytes/vlen_v2/vlen_v2_codec.rs @@ -7,11 +7,10 @@ use crate::{ codec::{ ArrayCodecTraits, ArrayPartialDecoderTraits, ArrayPartialEncoderDefault, ArrayPartialEncoderTraits, ArrayToBytesCodecTraits, BytesPartialDecoderTraits, - BytesPartialEncoderTraits, CodecError, CodecOptions, CodecTraits, + BytesPartialEncoderTraits, CodecError, CodecMetadataOptions, CodecOptions, CodecTraits, RecommendedConcurrency, }, - ArrayBytes, ArrayMetadataOptions, BytesRepresentation, ChunkRepresentation, DataTypeSize, - RawBytes, + ArrayBytes, BytesRepresentation, ChunkRepresentation, DataTypeSize, RawBytes, }, config::global_config, metadata::v3::MetadataV3, @@ -35,7 +34,7 @@ impl VlenV2Codec { } impl CodecTraits for VlenV2Codec { - fn create_metadata_opt(&self, _options: &ArrayMetadataOptions) -> Option { + fn create_metadata_opt(&self, _options: &CodecMetadataOptions) -> Option { let config = global_config(); let name = config .experimental_codec_names() diff --git a/zarrs/src/array/codec/array_to_bytes/vlen_v2/vlen_v2_macros.rs b/zarrs/src/array/codec/array_to_bytes/vlen_v2/vlen_v2_macros.rs index 0ea12587..40a887be 100644 --- a/zarrs/src/array/codec/array_to_bytes/vlen_v2/vlen_v2_macros.rs +++ b/zarrs/src/array/codec/array_to_bytes/vlen_v2/vlen_v2_macros.rs @@ -45,10 +45,11 @@ macro_rules! vlen_v2_codec { codec::{ array_to_bytes::vlen_v2::VlenV2Codec, ArrayPartialDecoderTraits, ArrayPartialEncoderTraits, ArrayToBytesCodecTraits, BytesPartialDecoderTraits, - BytesPartialEncoderTraits, CodecError, CodecOptions, CodecTraits, + BytesPartialEncoderTraits, CodecError, CodecMetadataOptions, CodecOptions, + CodecTraits, }, - ArrayBytes, ArrayCodecTraits, ArrayMetadataOptions, BytesRepresentation, - ChunkRepresentation, RawBytes, RecommendedConcurrency, + ArrayBytes, ArrayCodecTraits, BytesRepresentation, ChunkRepresentation, RawBytes, + RecommendedConcurrency, }; #[cfg(feature = "async")] @@ -77,7 +78,7 @@ macro_rules! vlen_v2_codec { } impl CodecTraits for $struct { - fn create_metadata_opt(&self, options: &ArrayMetadataOptions) -> Option { + fn create_metadata_opt(&self, options: &CodecMetadataOptions) -> Option { self.inner.create_metadata_opt(options) } diff --git a/zarrs/src/array/codec/array_to_bytes/zfp/zfp_codec.rs b/zarrs/src/array/codec/array_to_bytes/zfp/zfp_codec.rs index 8a7a1406..81294871 100644 --- a/zarrs/src/array/codec/array_to_bytes/zfp/zfp_codec.rs +++ b/zarrs/src/array/codec/array_to_bytes/zfp/zfp_codec.rs @@ -15,10 +15,10 @@ use crate::{ codec::{ ArrayBytes, ArrayCodecTraits, ArrayPartialDecoderTraits, ArrayPartialEncoderDefault, ArrayPartialEncoderTraits, ArrayToBytesCodecTraits, BytesPartialDecoderTraits, - BytesPartialEncoderTraits, CodecError, CodecOptions, CodecTraits, RawBytes, - RecommendedConcurrency, + BytesPartialEncoderTraits, CodecError, CodecMetadataOptions, CodecOptions, CodecTraits, + RawBytes, RecommendedConcurrency, }, - ArrayMetadataOptions, BytesRepresentation, ChunkRepresentation, DataType, + BytesRepresentation, ChunkRepresentation, DataType, }, config::global_config, metadata::v3::{array::codec::zfp::ZfpMode, MetadataV3}, @@ -129,7 +129,7 @@ impl ZfpCodec { } impl CodecTraits for ZfpCodec { - fn create_metadata_opt(&self, _options: &ArrayMetadataOptions) -> Option { + fn create_metadata_opt(&self, _options: &CodecMetadataOptions) -> Option { let configuration = ZfpCodecConfigurationV1 { write_header: Some(self.write_header), mode: self.mode, diff --git a/zarrs/src/array/codec/bytes_to_bytes/blosc/blosc_codec.rs b/zarrs/src/array/codec/bytes_to_bytes/blosc/blosc_codec.rs index 62972cd9..afd1bdb0 100644 --- a/zarrs/src/array/codec/bytes_to_bytes/blosc/blosc_codec.rs +++ b/zarrs/src/array/codec/bytes_to_bytes/blosc/blosc_codec.rs @@ -6,9 +6,10 @@ use crate::{ array::{ codec::{ BytesPartialDecoderTraits, BytesPartialEncoderDefault, BytesPartialEncoderTraits, - BytesToBytesCodecTraits, CodecError, CodecOptions, CodecTraits, RecommendedConcurrency, + BytesToBytesCodecTraits, CodecError, CodecMetadataOptions, CodecOptions, CodecTraits, + RecommendedConcurrency, }, - ArrayMetadataOptions, BytesRepresentation, RawBytes, + BytesRepresentation, RawBytes, }, metadata::v3::MetadataV3, plugin::PluginCreateError, @@ -131,7 +132,7 @@ impl BloscCodec { } impl CodecTraits for BloscCodec { - fn create_metadata_opt(&self, _options: &ArrayMetadataOptions) -> Option { + fn create_metadata_opt(&self, _options: &CodecMetadataOptions) -> Option { let configuration = BloscCodecConfigurationV1 { cname: self.cname, clevel: self.clevel, diff --git a/zarrs/src/array/codec/bytes_to_bytes/bz2/bz2_codec.rs b/zarrs/src/array/codec/bytes_to_bytes/bz2/bz2_codec.rs index d1380c3e..e967e681 100644 --- a/zarrs/src/array/codec/bytes_to_bytes/bz2/bz2_codec.rs +++ b/zarrs/src/array/codec/bytes_to_bytes/bz2/bz2_codec.rs @@ -8,9 +8,10 @@ use crate::{ array::{ codec::{ BytesPartialDecoderTraits, BytesPartialEncoderDefault, BytesPartialEncoderTraits, - BytesToBytesCodecTraits, CodecError, CodecOptions, CodecTraits, RecommendedConcurrency, + BytesToBytesCodecTraits, CodecError, CodecMetadataOptions, CodecOptions, CodecTraits, + RecommendedConcurrency, }, - ArrayMetadataOptions, BytesRepresentation, RawBytes, + BytesRepresentation, RawBytes, }, config::global_config, metadata::v3::MetadataV3, @@ -46,7 +47,7 @@ impl Bz2Codec { } impl CodecTraits for Bz2Codec { - fn create_metadata_opt(&self, _options: &ArrayMetadataOptions) -> Option { + fn create_metadata_opt(&self, _options: &CodecMetadataOptions) -> Option { let configuration = Bz2CodecConfigurationV1 { level: Bz2CompressionLevel::try_from(self.compression.level()) .expect("checked on init"), diff --git a/zarrs/src/array/codec/bytes_to_bytes/crc32c/crc32c_codec.rs b/zarrs/src/array/codec/bytes_to_bytes/crc32c/crc32c_codec.rs index 7e88534b..47d1cfc6 100644 --- a/zarrs/src/array/codec/bytes_to_bytes/crc32c/crc32c_codec.rs +++ b/zarrs/src/array/codec/bytes_to_bytes/crc32c/crc32c_codec.rs @@ -5,9 +5,10 @@ use crate::{ codec::{ bytes_to_bytes::strip_suffix_partial_decoder::StripSuffixPartialDecoder, BytesPartialDecoderTraits, BytesPartialEncoderDefault, BytesPartialEncoderTraits, - BytesToBytesCodecTraits, CodecError, CodecOptions, CodecTraits, RecommendedConcurrency, + BytesToBytesCodecTraits, CodecError, CodecMetadataOptions, CodecOptions, CodecTraits, + RecommendedConcurrency, }, - ArrayMetadataOptions, BytesRepresentation, RawBytes, + BytesRepresentation, RawBytes, }, metadata::v3::MetadataV3, }; @@ -39,7 +40,7 @@ impl Crc32cCodec { } impl CodecTraits for Crc32cCodec { - fn create_metadata_opt(&self, _options: &ArrayMetadataOptions) -> Option { + fn create_metadata_opt(&self, _options: &CodecMetadataOptions) -> Option { let configuration = Crc32cCodecConfigurationV1 {}; Some(MetadataV3::new_with_serializable_configuration(IDENTIFIER, &configuration).unwrap()) } diff --git a/zarrs/src/array/codec/bytes_to_bytes/fletcher32/fletcher32_codec.rs b/zarrs/src/array/codec/bytes_to_bytes/fletcher32/fletcher32_codec.rs index 04e319f6..0944ea56 100644 --- a/zarrs/src/array/codec/bytes_to_bytes/fletcher32/fletcher32_codec.rs +++ b/zarrs/src/array/codec/bytes_to_bytes/fletcher32/fletcher32_codec.rs @@ -7,9 +7,10 @@ use crate::{ codec::{ bytes_to_bytes::strip_suffix_partial_decoder::StripSuffixPartialDecoder, BytesPartialDecoderTraits, BytesPartialEncoderDefault, BytesPartialEncoderTraits, - BytesToBytesCodecTraits, CodecError, CodecOptions, CodecTraits, RecommendedConcurrency, + BytesToBytesCodecTraits, CodecError, CodecMetadataOptions, CodecOptions, CodecTraits, + RecommendedConcurrency, }, - ArrayMetadataOptions, BytesRepresentation, RawBytes, + BytesRepresentation, RawBytes, }, metadata::v3::MetadataV3, }; @@ -43,7 +44,7 @@ impl Fletcher32Codec { } impl CodecTraits for Fletcher32Codec { - fn create_metadata_opt(&self, _options: &ArrayMetadataOptions) -> Option { + fn create_metadata_opt(&self, _options: &CodecMetadataOptions) -> Option { let configuration = Fletcher32CodecConfigurationV1 {}; Some(MetadataV3::new_with_serializable_configuration(IDENTIFIER, &configuration).unwrap()) } diff --git a/zarrs/src/array/codec/bytes_to_bytes/gdeflate/gdeflate_codec.rs b/zarrs/src/array/codec/bytes_to_bytes/gdeflate/gdeflate_codec.rs index 93ac2590..8d969abd 100644 --- a/zarrs/src/array/codec/bytes_to_bytes/gdeflate/gdeflate_codec.rs +++ b/zarrs/src/array/codec/bytes_to_bytes/gdeflate/gdeflate_codec.rs @@ -4,9 +4,9 @@ use crate::{ array::{ codec::{ BytesPartialDecoderTraits, BytesPartialEncoderDefault, BytesPartialEncoderTraits, - BytesToBytesCodecTraits, CodecError, CodecOptions, CodecTraits, + BytesToBytesCodecTraits, CodecError, CodecMetadataOptions, CodecOptions, CodecTraits, }, - ArrayMetadataOptions, BytesRepresentation, RawBytes, RecommendedConcurrency, + BytesRepresentation, RawBytes, RecommendedConcurrency, }, metadata::v3::MetadataV3, }; @@ -47,7 +47,7 @@ impl GDeflateCodec { } impl CodecTraits for GDeflateCodec { - fn create_metadata_opt(&self, _options: &ArrayMetadataOptions) -> Option { + fn create_metadata_opt(&self, _options: &CodecMetadataOptions) -> Option { let configuration = GDeflateCodecConfigurationV1 { level: self.compression_level, }; diff --git a/zarrs/src/array/codec/bytes_to_bytes/gzip/gzip_codec.rs b/zarrs/src/array/codec/bytes_to_bytes/gzip/gzip_codec.rs index af57ada4..aa249c68 100644 --- a/zarrs/src/array/codec/bytes_to_bytes/gzip/gzip_codec.rs +++ b/zarrs/src/array/codec/bytes_to_bytes/gzip/gzip_codec.rs @@ -10,9 +10,10 @@ use crate::{ array::{ codec::{ BytesPartialDecoderTraits, BytesPartialEncoderDefault, BytesPartialEncoderTraits, - BytesToBytesCodecTraits, CodecError, CodecOptions, CodecTraits, RecommendedConcurrency, + BytesToBytesCodecTraits, CodecError, CodecMetadataOptions, CodecOptions, CodecTraits, + RecommendedConcurrency, }, - ArrayMetadataOptions, BytesRepresentation, RawBytes, + BytesRepresentation, RawBytes, }, metadata::v3::MetadataV3, }; @@ -52,7 +53,7 @@ impl GzipCodec { } impl CodecTraits for GzipCodec { - fn create_metadata_opt(&self, _options: &ArrayMetadataOptions) -> Option { + fn create_metadata_opt(&self, _options: &CodecMetadataOptions) -> Option { let configuration = GzipCodecConfigurationV1 { level: self.compression_level, }; diff --git a/zarrs/src/array/codec/bytes_to_bytes/test_unbounded/test_unbounded_codec.rs b/zarrs/src/array/codec/bytes_to_bytes/test_unbounded/test_unbounded_codec.rs index ee419d23..4166a6ca 100644 --- a/zarrs/src/array/codec/bytes_to_bytes/test_unbounded/test_unbounded_codec.rs +++ b/zarrs/src/array/codec/bytes_to_bytes/test_unbounded/test_unbounded_codec.rs @@ -4,9 +4,10 @@ use crate::{ array::{ codec::{ BytesPartialDecoderTraits, BytesPartialEncoderDefault, BytesPartialEncoderTraits, - BytesToBytesCodecTraits, CodecError, CodecOptions, CodecTraits, RecommendedConcurrency, + BytesToBytesCodecTraits, CodecError, CodecMetadataOptions, CodecOptions, CodecTraits, + RecommendedConcurrency, }, - ArrayMetadataOptions, BytesRepresentation, RawBytes, + BytesRepresentation, RawBytes, }, metadata::v3::MetadataV3, }; @@ -31,7 +32,7 @@ impl TestUnboundedCodec { } impl CodecTraits for TestUnboundedCodec { - fn create_metadata_opt(&self, _options: &ArrayMetadataOptions) -> Option { + fn create_metadata_opt(&self, _options: &CodecMetadataOptions) -> Option { None } diff --git a/zarrs/src/array/codec/bytes_to_bytes/zstd/zstd_codec.rs b/zarrs/src/array/codec/bytes_to_bytes/zstd/zstd_codec.rs index 185b060f..03138c63 100644 --- a/zarrs/src/array/codec/bytes_to_bytes/zstd/zstd_codec.rs +++ b/zarrs/src/array/codec/bytes_to_bytes/zstd/zstd_codec.rs @@ -6,9 +6,10 @@ use crate::{ array::{ codec::{ BytesPartialDecoderTraits, BytesPartialEncoderDefault, BytesPartialEncoderTraits, - BytesToBytesCodecTraits, CodecError, CodecOptions, CodecTraits, RecommendedConcurrency, + BytesToBytesCodecTraits, CodecError, CodecMetadataOptions, CodecOptions, CodecTraits, + RecommendedConcurrency, }, - ArrayMetadataOptions, BytesRepresentation, RawBytes, + BytesRepresentation, RawBytes, }, metadata::v3::MetadataV3, }; @@ -47,7 +48,7 @@ impl ZstdCodec { } impl CodecTraits for ZstdCodec { - fn create_metadata_opt(&self, _options: &ArrayMetadataOptions) -> Option { + fn create_metadata_opt(&self, _options: &CodecMetadataOptions) -> Option { let configuration = ZstdCodecConfigurationV1 { level: self.compression.into(), checksum: self.checksum, diff --git a/zarrs/src/array/codec/metadata_options.rs b/zarrs/src/array/codec/metadata_options.rs new file mode 100644 index 00000000..7a0a94c2 --- /dev/null +++ b/zarrs/src/array/codec/metadata_options.rs @@ -0,0 +1,39 @@ +//! Codec metadata options. + +/// Options for codec metadata. +#[derive(Debug, Clone, Default)] +pub struct CodecMetadataOptions { + experimental_codec_store_metadata_if_encode_only: bool, +} + +// impl Default for CodecMetadataOptions { +// fn default() -> Self { +// Self { +// experimental_codec_store_metadata_if_encode_only: false, +// } +// } +// } + +impl CodecMetadataOptions { + /// Return the [experimental codec store metadata if encode only](crate::config::Config#experimental-codec-store-metadata-if-encode-only) setting. + #[must_use] + pub fn experimental_codec_store_metadata_if_encode_only(&self) -> bool { + self.experimental_codec_store_metadata_if_encode_only + } + + /// Set the [experimental codec store metadata if encode only](crate::config::Config#experimental-codec-store-metadata-if-encode-only) setting. + #[must_use] + pub fn with_experimental_codec_store_metadata_if_encode_only(mut self, enabled: bool) -> Self { + self.experimental_codec_store_metadata_if_encode_only = enabled; + self + } + + /// Set the [experimental codec store metadata if encode only](crate::config::Config#experimental-codec-store-metadata-if-encode-only) setting. + pub fn set_experimental_codec_store_metadata_if_encode_only( + &mut self, + enabled: bool, + ) -> &mut Self { + self.experimental_codec_store_metadata_if_encode_only = enabled; + self + } +}