#[derive(Debug, Clone, Copy)]
#[non_exhaustive]
pub enum SubchunkWriteOrder {
Random,
C,
}
#[derive(Debug, Clone)]
#[non_exhaustive]
pub struct ShardingCodecOptions {
subchunk_write_order: SubchunkWriteOrder,
}
impl Default for ShardingCodecOptions {
fn default() -> Self {
Self {
subchunk_write_order: SubchunkWriteOrder::Random,
}
}
}
impl ShardingCodecOptions {
#[must_use]
pub fn with_subchunk_write_order(mut self, subchunk_write_order: SubchunkWriteOrder) -> Self {
self.subchunk_write_order = subchunk_write_order;
self
}
pub fn set_subchunk_write_order(
&mut self,
subchunk_write_order: SubchunkWriteOrder,
) -> &mut Self {
self.subchunk_write_order = subchunk_write_order;
self
}
#[must_use]
pub fn subchunk_write_order(&self) -> SubchunkWriteOrder {
self.subchunk_write_order
}
}
#[cfg(test)]
mod tests {
use crate::array::codec::array_to_bytes::sharding::sharding_options::SubchunkWriteOrder;
use super::ShardingCodecOptions;
use zarrs_codec::CodecSpecificOptions;
#[test]
fn sharding_options_not_set_by_default() {
let opts = CodecSpecificOptions::default();
assert!(opts.get_option::<ShardingCodecOptions>().is_none());
}
#[test]
fn sharding_options_present_after_set() {
let opts = CodecSpecificOptions::default().with_option(ShardingCodecOptions::default());
assert!(opts.get_option::<ShardingCodecOptions>().is_some());
}
#[test]
fn sharding_has_option() {
let opts = CodecSpecificOptions::default().with_option(
ShardingCodecOptions::default().with_subchunk_write_order(SubchunkWriteOrder::C),
);
assert!(matches!(
opts.get_option::<ShardingCodecOptions>()
.unwrap()
.subchunk_write_order(),
SubchunkWriteOrder::C
));
}
}