Skip to content

Commit

Permalink
Improve filed path formatting, remove unncessary Result
Browse files Browse the repository at this point in the history
  • Loading branch information
chmp committed Sep 1, 2024
1 parent f5434f6 commit 45b1b05
Show file tree
Hide file tree
Showing 6 changed files with 81 additions and 64 deletions.
10 changes: 5 additions & 5 deletions serde_arrow/src/arrow2_impl/array.rs
Original file line number Diff line number Diff line change
Expand Up @@ -298,7 +298,7 @@ impl<'a> TryFrom<&'a dyn A2Array> for ArrayView<'a> {
);
};
Ok(V::List(ListArrayView {
meta: meta_from_field(field.as_ref().try_into()?)?,
meta: meta_from_field(field.as_ref().try_into()?),
validity: bits_with_offset_from_bitmap(array.validity()),
offsets: array.offsets().as_slice(),
element: Box::new(array.values().as_ref().try_into()?),
Expand All @@ -311,7 +311,7 @@ impl<'a> TryFrom<&'a dyn A2Array> for ArrayView<'a> {
);
};
Ok(V::LargeList(ListArrayView {
meta: meta_from_field(field.as_ref().try_into()?)?,
meta: meta_from_field(field.as_ref().try_into()?),
validity: bits_with_offset_from_bitmap(array.validity()),
offsets: array.offsets().as_slice(),
element: Box::new(array.values().as_ref().try_into()?),
Expand All @@ -327,7 +327,7 @@ impl<'a> TryFrom<&'a dyn A2Array> for ArrayView<'a> {
for (child_field, child) in child_fields.iter().zip(array.values()) {
fields.push((
child.as_ref().try_into()?,
meta_from_field(child_field.try_into()?)?,
meta_from_field(child_field.try_into()?),
));
}
Ok(V::Struct(StructArrayView {
Expand All @@ -342,7 +342,7 @@ impl<'a> TryFrom<&'a dyn A2Array> for ArrayView<'a> {
array.data_type(),
);
};
let meta = meta_from_field(field.as_ref().try_into()?)?;
let meta = meta_from_field(field.as_ref().try_into()?);
let element: ArrayView<'_> = array.field().as_ref().try_into()?;

Ok(V::Map(ListArrayView {
Expand Down Expand Up @@ -378,7 +378,7 @@ impl<'a> TryFrom<&'a dyn A2Array> for ArrayView<'a> {
fields.push((
(*type_id).try_into()?,
child.as_ref().try_into()?,
meta_from_field(child_field.try_into()?)?,
meta_from_field(child_field.try_into()?),
));
}

Expand Down
12 changes: 6 additions & 6 deletions serde_arrow/src/arrow_impl/array.rs
Original file line number Diff line number Diff line change
Expand Up @@ -433,7 +433,7 @@ impl<'a> TryFrom<&'a dyn Array> for ArrayView<'a> {
Ok(ArrayView::List(ListArrayView {
validity: get_bits_with_offset(array),
offsets: array.value_offsets(),
meta: meta_from_field(field.as_ref().try_into()?)?,
meta: meta_from_field(field.as_ref().try_into()?),
element: Box::new(array.values().as_ref().try_into()?),
}))
} else if let Some(array) = any.downcast_ref::<GenericListArray<i64>>() {
Expand All @@ -443,7 +443,7 @@ impl<'a> TryFrom<&'a dyn Array> for ArrayView<'a> {
Ok(ArrayView::LargeList(ListArrayView {
validity: get_bits_with_offset(array),
offsets: array.value_offsets(),
meta: meta_from_field(field.as_ref().try_into()?)?,
meta: meta_from_field(field.as_ref().try_into()?),
element: Box::new(array.values().as_ref().try_into()?),
}))
} else if let Some(array) = any.downcast_ref::<FixedSizeListArray>() {
Expand All @@ -454,7 +454,7 @@ impl<'a> TryFrom<&'a dyn Array> for ArrayView<'a> {
len: array.len(),
n: *n,
validity: get_bits_with_offset(array),
meta: meta_from_field(field.as_ref().try_into()?)?,
meta: meta_from_field(field.as_ref().try_into()?),
element: Box::new(array.values().as_ref().try_into()?),
}))
} else if let Some(array) = any.downcast_ref::<StructArray>() {
Expand All @@ -465,7 +465,7 @@ impl<'a> TryFrom<&'a dyn Array> for ArrayView<'a> {
let mut fields = Vec::new();
for (field, array) in std::iter::zip(column_fields, array.columns()) {
let view = ArrayView::try_from(array.as_ref())?;
let meta = meta_from_field(Field::try_from(field.as_ref())?)?;
let meta = meta_from_field(Field::try_from(field.as_ref())?);
fields.push((view, meta));
}

Expand All @@ -483,7 +483,7 @@ impl<'a> TryFrom<&'a dyn Array> for ArrayView<'a> {
Ok(ArrayView::Map(ListArrayView {
validity: get_bits_with_offset(array),
offsets: array.value_offsets(),
meta: meta_from_field(Field::try_from(entries_field.as_ref())?)?,
meta: meta_from_field(Field::try_from(entries_field.as_ref())?),
element: Box::new(entries_array.try_into()?),
}))
} else if let Some(array) = any.downcast_ref::<DictionaryArray<UInt8Type>>() {
Expand All @@ -509,7 +509,7 @@ impl<'a> TryFrom<&'a dyn Array> for ArrayView<'a> {

let mut fields = Vec::new();
for (type_id, field) in union_fields.iter() {
let meta = meta_from_field(Field::try_from(field.as_ref())?)?;
let meta = meta_from_field(Field::try_from(field.as_ref())?);
let view: ArrayView = array.child(type_id).as_ref().try_into()?;
fields.push((type_id, view, meta));
}
Expand Down
38 changes: 27 additions & 11 deletions serde_arrow/src/internal/serialization/outer_sequence_builder.rs
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,7 @@ fn build_struct(path: String, struct_fields: &[Field], nullable: bool) -> Result
let field_path = format!("{path}.{field_name}", field_name = field.name);
fields.push((
build_builder(field_path, field)?,
meta_from_field(field.clone())?,
meta_from_field(field.clone()),
));
}
StructBuilder::new(path, fields, nullable)
Expand Down Expand Up @@ -176,28 +176,28 @@ fn build_builder(path: String, field: &Field) -> Result<ArrayBuilder> {
T::Utf8 => A::Utf8(Utf8Builder::new(path, field.nullable)),
T::LargeUtf8 => A::LargeUtf8(Utf8Builder::new(path, field.nullable)),
T::List(child) => {
let child_path = format!("{path}.{child_name}", child_name = child.name);
let child_path = format!("{path}.{child_name}", child_name = ChildName(&child.name));
A::List(ListBuilder::new(
path,
meta_from_field(*child.clone())?,
meta_from_field(*child.clone()),
build_builder(child_path, child.as_ref())?,
field.nullable,
)?)
}
T::LargeList(child) => {
let child_path = format!("{path}.{child_name}", child_name = child.name);
let child_path = format!("{path}.{child_name}", child_name = ChildName(&child.name));
A::LargeList(ListBuilder::new(
path,
meta_from_field(*child.clone())?,
meta_from_field(*child.clone()),
build_builder(child_path, child.as_ref())?,
field.nullable,
)?)
}
T::FixedSizeList(child, n) => {
let child_path = format!("{path}.{child_name}", child_name = child.name);
let child_path = format!("{path}.{child_name}", child_name = ChildName(&child.name));
A::FixedSizedList(FixedSizeListBuilder::new(
path,
meta_from_field(*child.clone())?,
meta_from_field(*child.clone()),
build_builder(child_path, child.as_ref())?,
(*n).try_into()?,
field.nullable,
Expand All @@ -211,10 +211,13 @@ fn build_builder(path: String, field: &Field) -> Result<ArrayBuilder> {
field.nullable,
)),
T::Map(entry_field, _) => {
let child_path = format!("{path}.{child_name}", child_name = entry_field.name);
let child_path = format!(
"{path}.{child_name}",
child_name = ChildName(&entry_field.name)
);
A::Map(MapBuilder::new(
path,
meta_from_field(*entry_field.clone())?,
meta_from_field(*entry_field.clone()),
build_builder(child_path, entry_field.as_ref())?,
field.nullable,
)?)
Expand Down Expand Up @@ -249,10 +252,11 @@ fn build_builder(path: String, field: &Field) -> Result<ArrayBuilder> {
if usize::try_from(*type_id) != Ok(idx) {
fail!("non consecutive type ids are not supported");
}
let field_path = format!("{path}.{field_name}", field_name = field.name);
let field_path =
format!("{path}.{field_name}", field_name = ChildName(&field.name));
fields.push((
build_builder(field_path, field)?,
meta_from_field(field.clone())?,
meta_from_field(field.clone()),
));
}

Expand All @@ -277,3 +281,15 @@ fn is_utc_strategy(strategy: Option<&Strategy>) -> Result<bool> {
Some(st) => fail!("Cannot builder Date64 builder with strategy {st}"),
}
}

struct ChildName<'a>(&'a str);

impl<'a> std::fmt::Display for ChildName<'a> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
if !self.0.is_empty() {
write!(f, "{}", self.0)
} else {
write!(f, "<empty>")
}
}
}
76 changes: 38 additions & 38 deletions serde_arrow/src/internal/serialization/unknown_variant_builder.rs
Original file line number Diff line number Diff line change
Expand Up @@ -43,71 +43,71 @@ impl Context for UnknownVariantBuilder {

impl SimpleSerializer for UnknownVariantBuilder {
fn serialize_default(&mut self) -> Result<()> {
fail!(in self, "Serialization failed: an unknown variant")
fail!(in self, "Unknown variant does not support serialize_default")
}

fn serialize_unit(&mut self) -> Result<()> {
fail!(in self, "Serialization failed: an unknown variant")
fail!(in self, "Unknown variant does not support serialize_unit")
}

fn serialize_none(&mut self) -> Result<()> {
fail!(in self, "Serialization failed: an unknown variant")
fail!(in self, "Unknown variant does not support serialize_none")
}

fn serialize_bool(&mut self, _: bool) -> Result<()> {
fail!(in self, "Serialization failed: an unknown variant")
fail!(in self, "Unknown variant does not support serialize_bool")
}

fn serialize_char(&mut self, _: char) -> Result<()> {
fail!(in self, "Serialization failed: an unknown variant")
fail!(in self, "Unknown variant does not support serialize_char")
}

fn serialize_u8(&mut self, _: u8) -> Result<()> {
fail!(in self, "Serialization failed: an unknown variant")
fail!(in self, "Unknown variant does not support serialize_u8")
}

fn serialize_u16(&mut self, _: u16) -> Result<()> {
fail!(in self, "Serialization failed: an unknown variant")
fail!(in self, "Unknown variant does not support serialize_u16")
}

fn serialize_u32(&mut self, _: u32) -> Result<()> {
fail!(in self, "Serialization failed: an unknown variant")
fail!(in self, "Unknown variant does not support serialize_u32")
}

fn serialize_u64(&mut self, _: u64) -> Result<()> {
fail!(in self, "Serialization failed: an unknown variant")
fail!(in self, "Unknown variant does not support serialize_u64")
}

fn serialize_i8(&mut self, _: i8) -> Result<()> {
fail!(in self, "Serialization failed: an unknown variant")
fail!(in self, "Unknown variant does not support serialize_i8")
}

fn serialize_i16(&mut self, _: i16) -> Result<()> {
fail!(in self, "Serialization failed: an unknown variant")
fail!(in self, "Unknown variant does not support serialize_i16")
}

fn serialize_i32(&mut self, _: i32) -> Result<()> {
fail!(in self, "Serialization failed: an unknown variant")
fail!(in self, "Unknown variant does not support serialize_i32")
}

fn serialize_i64(&mut self, _: i64) -> Result<()> {
fail!(in self, "Serialization failed: an unknown variant")
fail!(in self, "Unknown variant does not support serialize_i64")
}

fn serialize_f32(&mut self, _: f32) -> Result<()> {
fail!(in self, "Serialization failed: an unknown variant")
fail!(in self, "Unknown variant does not support serialize_f32")
}

fn serialize_f64(&mut self, _: f64) -> Result<()> {
fail!(in self, "Serialization failed: an unknown variant")
fail!(in self, "Unknown variant does not support serialize_f64")
}

fn serialize_bytes(&mut self, _: &[u8]) -> Result<()> {
fail!(in self, "Serialization failed: an unknown variant")
fail!(in self, "Unknown variant does not support serialize_bytes")
}

fn serialize_str(&mut self, _: &str) -> Result<()> {
fail!(in self, "Serialization failed: an unknown variant")
fail!(in self, "Unknown variant does not support serialize_str")
}

fn serialize_newtype_variant<V: Serialize + ?Sized>(
Expand All @@ -117,83 +117,83 @@ impl SimpleSerializer for UnknownVariantBuilder {
_: &'static str,
_: &V,
) -> Result<()> {
fail!(in self, "Serialization failed: an unknown variant")
fail!(in self, "Unknown variant does not support serialize_newtype_variant")
}

fn serialize_unit_struct(&mut self, _: &'static str) -> Result<()> {
fail!(in self, "Serialization failed: an unknown variant")
fail!(in self, "Unknown variant does not support serialize_unit_struct")
}

fn serialize_unit_variant(&mut self, _: &'static str, _: u32, _: &'static str) -> Result<()> {
fail!(in self, "Serialization failed: an unknown variant")
fail!(in self, "Unknown variant does not support serialize_unit_variant")
}

fn serialize_map_start(&mut self, _: Option<usize>) -> Result<()> {
fail!(in self, "Serialization failed: an unknown variant")
fail!(in self, "Unknown variant does not support serialize_map_start")
}

fn serialize_map_key<V: Serialize + ?Sized>(&mut self, _: &V) -> Result<()> {
fail!(in self, "Serialization failed: an unknown variant")
fail!(in self, "Unknown variant does not support serialize_map_jey")
}

fn serialize_map_value<V: Serialize + ?Sized>(&mut self, _: &V) -> Result<()> {
fail!(in self, "Serialization failed: an unknown variant")
fail!(in self, "Unknown variant does not support serialize_map_value")
}

fn serialize_map_end(&mut self) -> Result<()> {
fail!(in self, "Serialization failed: an unknown variant")
fail!(in self, "Unknown variant does not support serialize_map_end")
}

fn serialize_seq_start(&mut self, _: Option<usize>) -> Result<()> {
fail!(in self, "Serialization failed: an unknown variant")
fail!(in self, "Unknown variant does not support serialize_seq_start")
}

fn serialize_seq_element<V: Serialize + ?Sized>(&mut self, _: &V) -> Result<()> {
fail!(in self, "Serialization failed: an unknown variant")
fail!(in self, "Unknown variant does not support serialize_seq_element")
}

fn serialize_seq_end(&mut self) -> Result<()> {
fail!(in self, "Serialization failed: an unknown variant")
fail!(in self, "Unknown variant does not support serialize_seq_end")
}

fn serialize_struct_start(&mut self, _: &'static str, _: usize) -> Result<()> {
fail!(in self, "Serialization failed: an unknown variant")
fail!(in self, "Unknown variant does not support serialize_struct_start")
}

fn serialize_struct_field<V: Serialize + ?Sized>(
&mut self,
_: &'static str,
_: &V,
) -> Result<()> {
fail!(in self, "Serialization failed: an unknown variant")
fail!(in self, "Unknown variant does not support serialize_struct_field")
}

fn serialize_struct_end(&mut self) -> Result<()> {
fail!(in self, "Serialization failed: an unknown variant")
fail!(in self, "Unknown variant does not support serialize_struct_end")
}

fn serialize_tuple_start(&mut self, _: usize) -> Result<()> {
fail!(in self, "Serialization failed: an unknown variant")
fail!(in self, "Unknown variant does not support serialize_tuple_start")
}

fn serialize_tuple_element<V: Serialize + ?Sized>(&mut self, _: &V) -> Result<()> {
fail!(in self, "Serialization failed: an unknown variant")
fail!(in self, "Unknown variant does not support serialize_tuple_element")
}

fn serialize_tuple_end(&mut self) -> Result<()> {
fail!(in self, "Serialization failed: an unknown variant")
fail!(in self, "Unknown variant does not support serialize_tuple_end")
}

fn serialize_tuple_struct_start(&mut self, _: &'static str, _: usize) -> Result<()> {
fail!(in self, "Serialization failed: an unknown variant")
fail!(in self, "Unknown variant does not support serialize_tuple_struct_start")
}

fn serialize_tuple_struct_field<V: Serialize + ?Sized>(&mut self, _: &V) -> Result<()> {
fail!(in self, "Serialization failed: an unknown variant");
fail!(in self, "Unknown variant does not support serialize_tuple_struct_field");
}

fn serialize_tuple_struct_end(&mut self) -> Result<()> {
fail!(in self, "Serialization failed: an unknown variant");
fail!(in self, "Unknown variant does not support serialize_tuple_struct_end");
}

fn serialize_struct_variant_start<'this>(
Expand All @@ -203,7 +203,7 @@ impl SimpleSerializer for UnknownVariantBuilder {
_: &'static str,
_: usize,
) -> Result<&'this mut ArrayBuilder> {
fail!(in self, "Serialization failed: an unknown variant")
fail!(in self, "Unknown variant does not support serialize_struct_variant_start")
}

fn serialize_tuple_variant_start<'this>(
Expand All @@ -213,6 +213,6 @@ impl SimpleSerializer for UnknownVariantBuilder {
_: &'static str,
_: usize,
) -> Result<&'this mut ArrayBuilder> {
fail!(in self, "Serialization failed: an unknown variant")
fail!(in self, "Unknown variant does not support serialize_tuple_variant_start")
}
}
Loading

0 comments on commit 45b1b05

Please sign in to comment.