From d607c33f3168e5547c15842d9b2416fa7d51dc24 Mon Sep 17 00:00:00 2001 From: "Jorge C. Leitao" Date: Fri, 3 Jun 2022 06:28:05 +0000 Subject: [PATCH] Added Debug to Map --- src/array/equal/mod.rs | 12 ++++++++++++ src/array/map/fmt.rs | 24 ++++++++++++++++++++++++ src/array/map/mod.rs | 3 ++- src/array/mod.rs | 2 +- 4 files changed, 39 insertions(+), 2 deletions(-) create mode 100644 src/array/map/fmt.rs diff --git a/src/array/equal/mod.rs b/src/array/equal/mod.rs index e916aaa0bb6..932ccd67bbe 100644 --- a/src/array/equal/mod.rs +++ b/src/array/equal/mod.rs @@ -165,6 +165,18 @@ impl PartialEq<&dyn Array> for UnionArray { } } +impl PartialEq for MapArray { + fn eq(&self, other: &Self) -> bool { + map::equal(self, other) + } +} + +impl PartialEq<&dyn Array> for MapArray { + fn eq(&self, other: &&dyn Array) -> bool { + equal(self, *other) + } +} + /// Logically compares two [`Array`]s. /// Two arrays are logically equal if and only if: /// * their data types are equal diff --git a/src/array/map/fmt.rs b/src/array/map/fmt.rs new file mode 100644 index 00000000000..60abf56e18c --- /dev/null +++ b/src/array/map/fmt.rs @@ -0,0 +1,24 @@ +use std::fmt::{Debug, Formatter, Result, Write}; + +use super::super::fmt::{get_display, write_vec}; +use super::MapArray; + +pub fn write_value( + array: &MapArray, + index: usize, + null: &'static str, + f: &mut W, +) -> Result { + let values = array.value(index); + let writer = |f: &mut W, index| get_display(values.as_ref(), null)(f, index); + write_vec(f, writer, None, values.len(), null, false) +} + +impl Debug for MapArray { + fn fmt(&self, f: &mut Formatter<'_>) -> Result { + let writer = |f: &mut Formatter, index| write_value(self, index, "None", f); + + write!(f, "MapArray")?; + write_vec(f, writer, self.validity.as_ref(), self.len(), "None", false) + } +} diff --git a/src/array/map/mod.rs b/src/array/map/mod.rs index 4c7e4754fd5..f8b754d6189 100644 --- a/src/array/map/mod.rs +++ b/src/array/map/mod.rs @@ -10,11 +10,12 @@ use crate::{ use super::{new_empty_array, specification::try_check_offsets, Array}; mod ffi; +mod fmt; mod iterator; pub use iterator::*; /// An array representing a (key, value), both of arbitrary logical types. -#[derive(Debug, Clone)] +#[derive(Clone)] pub struct MapArray { data_type: DataType, // invariant: field.len() == offsets.len() - 1 diff --git a/src/array/mod.rs b/src/array/mod.rs index 0be802df2f1..2a8806f0787 100644 --- a/src/array/mod.rs +++ b/src/array/mod.rs @@ -240,7 +240,7 @@ impl std::fmt::Debug for dyn Array + '_ { fmt_dyn!(self, DictionaryArray::<$T>, f) }) } - Map => todo!(), + Map => fmt_dyn!(self, MapArray, f), } } }