This is an automated email from the ASF dual-hosted git repository.

alamb pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/arrow-rs.git


The following commit(s) were added to refs/heads/master by this push:
     new 7f86ea4340 Make downcast macros hygenic (#6400) (#6620)
7f86ea4340 is described below

commit 7f86ea4340330839cb4cff01755308d2a0229ba6
Author: Raphael Taylor-Davies <[email protected]>
AuthorDate: Fri Nov 8 16:34:12 2024 +0000

    Make downcast macros hygenic (#6400) (#6620)
    
    * Make downcast macros hygenic (#6400)
    
    * Format
    
    * Update arrow-array/src/cast.rs
    
    Co-authored-by: Andrew Lamb <[email protected]>
    
    * fix fmt
    
    ---------
    
    Co-authored-by: Andrew Lamb <[email protected]>
---
 arrow-array/src/cast.rs | 78 +++++++++++++++++++++++++++----------------------
 1 file changed, 43 insertions(+), 35 deletions(-)

diff --git a/arrow-array/src/cast.rs b/arrow-array/src/cast.rs
index 501e85ced2..232b29560c 100644
--- a/arrow-array/src/cast.rs
+++ b/arrow-array/src/cast.rs
@@ -21,6 +21,14 @@ use crate::array::*;
 use crate::types::*;
 use arrow_data::ArrayData;
 
+/// Re-export symbols needed for downcast macros
+///
+/// Name follows `serde` convention
+#[doc(hidden)]
+pub mod __private {
+    pub use arrow_schema::{DataType, IntervalUnit, TimeUnit};
+}
+
 /// Repeats the provided pattern based on the number of comma separated 
identifiers
 #[doc(hidden)]
 #[macro_export]
@@ -66,28 +74,28 @@ macro_rules! repeat_pat {
 macro_rules! downcast_integer {
     ($($data_type:expr),+ => ($m:path $(, $args:tt)*), $($p:pat => 
$fallback:expr $(,)*)*) => {
         match ($($data_type),+) {
-            $crate::repeat_pat!(arrow_schema::DataType::Int8, $($data_type),+) 
=> {
+            $crate::repeat_pat!($crate::cast::__private::DataType::Int8, 
$($data_type),+) => {
                 $m!($crate::types::Int8Type $(, $args)*)
             }
-            $crate::repeat_pat!(arrow_schema::DataType::Int16, 
$($data_type),+) => {
+            $crate::repeat_pat!($crate::cast::__private::DataType::Int16, 
$($data_type),+) => {
                 $m!($crate::types::Int16Type $(, $args)*)
             }
-            $crate::repeat_pat!(arrow_schema::DataType::Int32, 
$($data_type),+) => {
+            $crate::repeat_pat!($crate::cast::__private::DataType::Int32, 
$($data_type),+) => {
                 $m!($crate::types::Int32Type $(, $args)*)
             }
-            $crate::repeat_pat!(arrow_schema::DataType::Int64, 
$($data_type),+) => {
+            $crate::repeat_pat!($crate::cast::__private::DataType::Int64, 
$($data_type),+) => {
                 $m!($crate::types::Int64Type $(, $args)*)
             }
-            $crate::repeat_pat!(arrow_schema::DataType::UInt8, 
$($data_type),+) => {
+            $crate::repeat_pat!($crate::cast::__private::DataType::UInt8, 
$($data_type),+) => {
                 $m!($crate::types::UInt8Type $(, $args)*)
             }
-            $crate::repeat_pat!(arrow_schema::DataType::UInt16, 
$($data_type),+) => {
+            $crate::repeat_pat!($crate::cast::__private::DataType::UInt16, 
$($data_type),+) => {
                 $m!($crate::types::UInt16Type $(, $args)*)
             }
-            $crate::repeat_pat!(arrow_schema::DataType::UInt32, 
$($data_type),+) => {
+            $crate::repeat_pat!($crate::cast::__private::DataType::UInt32, 
$($data_type),+) => {
                 $m!($crate::types::UInt32Type $(, $args)*)
             }
-            $crate::repeat_pat!(arrow_schema::DataType::UInt64, 
$($data_type),+) => {
+            $crate::repeat_pat!($crate::cast::__private::DataType::UInt64, 
$($data_type),+) => {
                 $m!($crate::types::UInt64Type $(, $args)*)
             }
             $($p => $fallback,)*
@@ -129,13 +137,13 @@ macro_rules! downcast_integer {
 macro_rules! downcast_run_end_index {
     ($($data_type:expr),+ => ($m:path $(, $args:tt)*), $($p:pat => 
$fallback:expr $(,)*)*) => {
         match ($($data_type),+) {
-            $crate::repeat_pat!(arrow_schema::DataType::Int16, 
$($data_type),+) => {
+            $crate::repeat_pat!($crate::cast::__private::DataType::Int16, 
$($data_type),+) => {
                 $m!($crate::types::Int16Type $(, $args)*)
             }
-            $crate::repeat_pat!(arrow_schema::DataType::Int32, 
$($data_type),+) => {
+            $crate::repeat_pat!($crate::cast::__private::DataType::Int32, 
$($data_type),+) => {
                 $m!($crate::types::Int32Type $(, $args)*)
             }
-            $crate::repeat_pat!(arrow_schema::DataType::Int64, 
$($data_type),+) => {
+            $crate::repeat_pat!($crate::cast::__private::DataType::Int64, 
$($data_type),+) => {
                 $m!($crate::types::Int64Type $(, $args)*)
             }
             $($p => $fallback,)*
@@ -172,34 +180,34 @@ macro_rules! downcast_run_end_index {
 macro_rules! downcast_temporal {
     ($($data_type:expr),+ => ($m:path $(, $args:tt)*), $($p:pat => 
$fallback:expr $(,)*)*) => {
         match ($($data_type),+) {
-            
$crate::repeat_pat!(arrow_schema::DataType::Time32(arrow_schema::TimeUnit::Second),
 $($data_type),+) => {
+            
$crate::repeat_pat!($crate::cast::__private::DataType::Time32($crate::cast::__private::TimeUnit::Second),
 $($data_type),+) => {
                 $m!($crate::types::Time32SecondType $(, $args)*)
             }
-            
$crate::repeat_pat!(arrow_schema::DataType::Time32(arrow_schema::TimeUnit::Millisecond),
 $($data_type),+) => {
+            
$crate::repeat_pat!($crate::cast::__private::DataType::Time32($crate::cast::__private::TimeUnit::Millisecond),
 $($data_type),+) => {
                 $m!($crate::types::Time32MillisecondType $(, $args)*)
             }
-            
$crate::repeat_pat!(arrow_schema::DataType::Time64(arrow_schema::TimeUnit::Microsecond),
 $($data_type),+) => {
+            
$crate::repeat_pat!($crate::cast::__private::DataType::Time64($crate::cast::__private::TimeUnit::Microsecond),
 $($data_type),+) => {
                 $m!($crate::types::Time64MicrosecondType $(, $args)*)
             }
-            
$crate::repeat_pat!(arrow_schema::DataType::Time64(arrow_schema::TimeUnit::Nanosecond),
 $($data_type),+) => {
+            
$crate::repeat_pat!($crate::cast::__private::DataType::Time64($crate::cast::__private::TimeUnit::Nanosecond),
 $($data_type),+) => {
                 $m!($crate::types::Time64NanosecondType $(, $args)*)
             }
-            $crate::repeat_pat!(arrow_schema::DataType::Date32, 
$($data_type),+) => {
+            $crate::repeat_pat!($crate::cast::__private::DataType::Date32, 
$($data_type),+) => {
                 $m!($crate::types::Date32Type $(, $args)*)
             }
-            $crate::repeat_pat!(arrow_schema::DataType::Date64, 
$($data_type),+) => {
+            $crate::repeat_pat!($crate::cast::__private::DataType::Date64, 
$($data_type),+) => {
                 $m!($crate::types::Date64Type $(, $args)*)
             }
-            
$crate::repeat_pat!(arrow_schema::DataType::Timestamp(arrow_schema::TimeUnit::Second,
 _), $($data_type),+) => {
+            
$crate::repeat_pat!($crate::cast::__private::DataType::Timestamp($crate::cast::__private::TimeUnit::Second,
 _), $($data_type),+) => {
                 $m!($crate::types::TimestampSecondType $(, $args)*)
             }
-            
$crate::repeat_pat!(arrow_schema::DataType::Timestamp(arrow_schema::TimeUnit::Millisecond,
 _), $($data_type),+) => {
+            
$crate::repeat_pat!($crate::cast::__private::DataType::Timestamp($crate::cast::__private::TimeUnit::Millisecond,
 _), $($data_type),+) => {
                 $m!($crate::types::TimestampMillisecondType $(, $args)*)
             }
-            
$crate::repeat_pat!(arrow_schema::DataType::Timestamp(arrow_schema::TimeUnit::Microsecond,
 _), $($data_type),+) => {
+            
$crate::repeat_pat!($crate::cast::__private::DataType::Timestamp($crate::cast::__private::TimeUnit::Microsecond,
 _), $($data_type),+) => {
                 $m!($crate::types::TimestampMicrosecondType $(, $args)*)
             }
-            
$crate::repeat_pat!(arrow_schema::DataType::Timestamp(arrow_schema::TimeUnit::Nanosecond,
 _), $($data_type),+) => {
+            
$crate::repeat_pat!($crate::cast::__private::DataType::Timestamp($crate::cast::__private::TimeUnit::Nanosecond,
 _), $($data_type),+) => {
                 $m!($crate::types::TimestampNanosecondType $(, $args)*)
             }
             $($p => $fallback,)*
@@ -284,40 +292,40 @@ macro_rules! downcast_primitive {
     ($($data_type:expr),+ => ($m:path $(, $args:tt)*), $($p:pat => 
$fallback:expr $(,)*)*) => {
         $crate::downcast_integer! {
             $($data_type),+ => ($m $(, $args)*),
-            $crate::repeat_pat!(arrow_schema::DataType::Float16, 
$($data_type),+) => {
+            $crate::repeat_pat!($crate::cast::__private::DataType::Float16, 
$($data_type),+) => {
                 $m!($crate::types::Float16Type $(, $args)*)
             }
-            $crate::repeat_pat!(arrow_schema::DataType::Float32, 
$($data_type),+) => {
+            $crate::repeat_pat!($crate::cast::__private::DataType::Float32, 
$($data_type),+) => {
                 $m!($crate::types::Float32Type $(, $args)*)
             }
-            $crate::repeat_pat!(arrow_schema::DataType::Float64, 
$($data_type),+) => {
+            $crate::repeat_pat!($crate::cast::__private::DataType::Float64, 
$($data_type),+) => {
                 $m!($crate::types::Float64Type $(, $args)*)
             }
-            $crate::repeat_pat!(arrow_schema::DataType::Decimal128(_, _), 
$($data_type),+) => {
+            
$crate::repeat_pat!($crate::cast::__private::DataType::Decimal128(_, _), 
$($data_type),+) => {
                 $m!($crate::types::Decimal128Type $(, $args)*)
             }
-            $crate::repeat_pat!(arrow_schema::DataType::Decimal256(_, _), 
$($data_type),+) => {
+            
$crate::repeat_pat!($crate::cast::__private::DataType::Decimal256(_, _), 
$($data_type),+) => {
                 $m!($crate::types::Decimal256Type $(, $args)*)
             }
-            
$crate::repeat_pat!(arrow_schema::DataType::Interval(arrow_schema::IntervalUnit::YearMonth),
 $($data_type),+) => {
+            
$crate::repeat_pat!($crate::cast::__private::DataType::Interval($crate::cast::__private::IntervalUnit::YearMonth),
 $($data_type),+) => {
                 $m!($crate::types::IntervalYearMonthType $(, $args)*)
             }
-            
$crate::repeat_pat!(arrow_schema::DataType::Interval(arrow_schema::IntervalUnit::DayTime),
 $($data_type),+) => {
+            
$crate::repeat_pat!($crate::cast::__private::DataType::Interval($crate::cast::__private::IntervalUnit::DayTime),
 $($data_type),+) => {
                 $m!($crate::types::IntervalDayTimeType $(, $args)*)
             }
-            
$crate::repeat_pat!(arrow_schema::DataType::Interval(arrow_schema::IntervalUnit::MonthDayNano),
 $($data_type),+) => {
+            
$crate::repeat_pat!($crate::cast::__private::DataType::Interval($crate::cast::__private::IntervalUnit::MonthDayNano),
 $($data_type),+) => {
                 $m!($crate::types::IntervalMonthDayNanoType $(, $args)*)
             }
-            
$crate::repeat_pat!(arrow_schema::DataType::Duration(arrow_schema::TimeUnit::Second),
 $($data_type),+) => {
+            
$crate::repeat_pat!($crate::cast::__private::DataType::Duration($crate::cast::__private::TimeUnit::Second),
 $($data_type),+) => {
                 $m!($crate::types::DurationSecondType $(, $args)*)
             }
-            
$crate::repeat_pat!(arrow_schema::DataType::Duration(arrow_schema::TimeUnit::Millisecond),
 $($data_type),+) => {
+            
$crate::repeat_pat!($crate::cast::__private::DataType::Duration($crate::cast::__private::TimeUnit::Millisecond),
 $($data_type),+) => {
                 $m!($crate::types::DurationMillisecondType $(, $args)*)
             }
-            
$crate::repeat_pat!(arrow_schema::DataType::Duration(arrow_schema::TimeUnit::Microsecond),
 $($data_type),+) => {
+            
$crate::repeat_pat!($crate::cast::__private::DataType::Duration($crate::cast::__private::TimeUnit::Microsecond),
 $($data_type),+) => {
                 $m!($crate::types::DurationMicrosecondType $(, $args)*)
             }
-            
$crate::repeat_pat!(arrow_schema::DataType::Duration(arrow_schema::TimeUnit::Nanosecond),
 $($data_type),+) => {
+            
$crate::repeat_pat!($crate::cast::__private::DataType::Duration($crate::cast::__private::TimeUnit::Nanosecond),
 $($data_type),+) => {
                 $m!($crate::types::DurationNanosecondType $(, $args)*)
             }
             _ => {
@@ -462,7 +470,7 @@ macro_rules! downcast_dictionary_array {
 
     ($values:ident => $e:block $($p:pat => $fallback:expr $(,)*)*) => {
         match $values.data_type() {
-            arrow_schema::DataType::Dictionary(k, _) => {
+            $crate::cast::__private::DataType::Dictionary(k, _) => {
                 $crate::downcast_integer! {
                     k.as_ref() => ($crate::downcast_dictionary_array_helper, 
$values, $e),
                     k => unreachable!("unsupported dictionary key type: {}", k)
@@ -564,7 +572,7 @@ macro_rules! downcast_run_array {
 
     ($values:ident => $e:block $($p:pat => $fallback:expr $(,)*)*) => {
         match $values.data_type() {
-            arrow_schema::DataType::RunEndEncoded(k, _) => {
+            $crate::cast::__private::DataType::RunEndEncoded(k, _) => {
                 $crate::downcast_run_end_index! {
                     k.data_type() => ($crate::downcast_run_array_helper, 
$values, $e),
                     k => unreachable!("unsupported run end index type: {}", k)

Reply via email to