From 4464d2ad3ea25255806510aaa1e93daa63b95ad9 Mon Sep 17 00:00:00 2001 From: Lachlan Deakin Date: Sat, 8 Feb 2025 10:10:41 +1100 Subject: [PATCH] fix(metadata): interpret 0 fill value as "0" for Zarr V2 arrays This was the default in zarr-python 2.x.x. --- zarrs_metadata/CHANGELOG.md | 3 +++ zarrs_metadata/src/v2_to_v3.rs | 5 +++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/zarrs_metadata/CHANGELOG.md b/zarrs_metadata/CHANGELOG.md index 45712372..48f8fbc4 100644 --- a/zarrs_metadata/CHANGELOG.md +++ b/zarrs_metadata/CHANGELOG.md @@ -7,6 +7,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +### Fixed +- Interpret a `0` fill value as `"0"` for Zarr V2 string arrays (for `zarr-python` 2.x.x compatibility) + ## [0.3.3] - 2025-02-06 ### Fixed diff --git a/zarrs_metadata/src/v2_to_v3.rs b/zarrs_metadata/src/v2_to_v3.rs index 3a203a10..59fd305f 100644 --- a/zarrs_metadata/src/v2_to_v3.rs +++ b/zarrs_metadata/src/v2_to_v3.rs @@ -257,9 +257,10 @@ pub fn array_metadata_v2_to_v3( } } } else if data_type.name() == "string" { - // Add a special case for `zarr-python` string data with a 0 fill value -> empty string + // Add a special case for string data with a 0 fill value -> "0" + // This was the default in zarr-python 2.x.x. if let Some(0) = fill_value.try_as_uint::() { - fill_value = FillValueMetadataV3::String(String::new()); + fill_value = FillValueMetadataV3::String("0".to_string()); } }