zarrs/array/data_type/
int2.rs1use super::macros::register_data_type_plugin;
4
5#[derive(Debug, Clone, Copy)]
7pub struct Int2DataType;
8register_data_type_plugin!(Int2DataType);
9zarrs_plugin::impl_extension_aliases!(Int2DataType, v3: "int2");
10
11impl zarrs_data_type::DataTypeTraits for Int2DataType {
12 fn configuration(&self, _version: zarrs_plugin::ZarrVersion) -> zarrs_metadata::Configuration {
13 zarrs_metadata::Configuration::default()
14 }
15
16 fn size(&self) -> zarrs_metadata::DataTypeSize {
17 zarrs_metadata::DataTypeSize::Fixed(1)
18 }
19
20 fn fill_value(
21 &self,
22 fill_value_metadata: &zarrs_metadata::FillValueMetadata,
23 _version: zarrs_plugin::ZarrVersion,
24 ) -> Result<zarrs_data_type::FillValue, zarrs_data_type::DataTypeFillValueMetadataError> {
25 let int = fill_value_metadata
26 .as_i64()
27 .ok_or(zarrs_data_type::DataTypeFillValueMetadataError)?;
28 if !(-2..=1).contains(&int) {
30 return Err(zarrs_data_type::DataTypeFillValueMetadataError);
31 }
32 #[expect(clippy::cast_possible_truncation)]
33 Ok(zarrs_data_type::FillValue::from(int as i8))
34 }
35
36 fn metadata_fill_value(
37 &self,
38 fill_value: &zarrs_data_type::FillValue,
39 ) -> Result<zarrs_metadata::FillValueMetadata, zarrs_data_type::DataTypeFillValueError> {
40 let bytes: [u8; 1] = fill_value
41 .as_ne_bytes()
42 .try_into()
43 .map_err(|_| zarrs_data_type::DataTypeFillValueError)?;
44 let number = i8::from_ne_bytes(bytes);
45 Ok(zarrs_metadata::FillValueMetadata::from(number))
46 }
47
48 fn as_any(&self) -> &dyn std::any::Any {
49 self
50 }
51
52 fn compatible_element_types(&self) -> &'static [std::any::TypeId] {
53 const TYPES: [std::any::TypeId; 1] = [std::any::TypeId::of::<i8>()];
54 &TYPES
55 }
56}
57
58zarrs_data_type::codec_traits::impl_pack_bits_data_type_traits!(Int2DataType, 2, signed, 1);
59zarrs_data_type::codec_traits::impl_bytes_data_type_traits!(Int2DataType, 1);