@@ -74,7 +74,7 @@ macro_rules! repeat_pat {
7474/// [`DataType`]: arrow_schema::DataType
7575#[ macro_export]
7676macro_rules! downcast_integer {
77- ( $( $data_type: expr) ,+ => ( $m: path $( , $args: tt) * ) , $( $p: pat $( if $pred: expr) * => $fallback: expr $( , ) * ) * ) => {
77+ ( $( $data_type: expr) ,+ => ( $m: path $( , $args: tt) * ) , $( $p: pat $( if $pred: expr) ? => $fallback: expr $( , ) ? ) * ) => {
7878 match ( $( $data_type) ,+) {
7979 $crate:: repeat_pat!( $crate:: cast:: __private:: DataType :: Int8 , $( $data_type) ,+) => {
8080 $m!( $crate:: types:: Int8Type $( , $args) * )
@@ -100,7 +100,7 @@ macro_rules! downcast_integer {
100100 $crate:: repeat_pat!( $crate:: cast:: __private:: DataType :: UInt64 , $( $data_type) ,+) => {
101101 $m!( $crate:: types:: UInt64Type $( , $args) * )
102102 }
103- $( $p $( if $pred) * => $fallback, ) *
103+ $( $p $( if $pred) ? => $fallback, ) *
104104 }
105105 } ;
106106}
@@ -138,21 +138,24 @@ macro_rules! downcast_integer {
138138/// [`DataType`]: arrow_schema::DataType
139139#[ macro_export]
140140macro_rules! downcast_integer_array {
141- ( $values: ident => $e: expr, $( $p: pat $( if $pred: expr) * => $fallback: expr $( , ) * ) * ) => {
142- $crate:: downcast_integer_array!( $values => { $e} $( $p $( if $pred) * => $fallback) * )
143- } ;
144- ( ( $( $values: ident) ,+) => $e: expr, $( $p: pat $( if $pred: expr) * => $fallback: expr $( , ) * ) * ) => {
145- $crate:: downcast_integer_array!( $( $values) ,+ => { $e} $( $p $( if $pred) * => $fallback) * )
146- } ;
147- ( $( $values: ident) ,+ => $e: block $( $p: pat $( if $pred: expr) * => $fallback: expr $( , ) * ) * ) => {
148- $crate:: downcast_integer_array!( ( $( $values) ,+) => $e $( $p $( if $pred) * => $fallback) * )
149- } ;
150- ( ( $( $values: ident) ,+) => $e: block $( $p: pat $( if $pred: expr) * => $fallback: expr $( , ) * ) * ) => {
141+ ( $( $values: ident) ,+ => $e: block $( $p: pat $( if $pred: expr) ? => $fallback: expr $( , ) ?) * ) => {
151142 $crate:: downcast_integer!{
152143 $( $values. data_type( ) ) ,+ => ( $crate:: downcast_primitive_array_helper, $( $values) ,+, $e) ,
153- $( $p $( if $pred) * => $fallback, ) *
144+ $( $p $( if $pred) ? => $fallback, ) *
154145 }
155146 } ;
147+ // Turn $e into a block.
148+ ( $values: ident => $e: expr, $( $p: pat $( if $pred: expr) ? => $fallback: expr $( , ) ?) * ) => {
149+ $crate:: downcast_integer_array!( $values => { $e} $( $p $( if $pred) ? => $fallback, ) * )
150+ } ;
151+ // Remove $values parentheses.
152+ ( ( $( $values: ident) ,+) => $e: block $( $p: pat $( if $pred: expr) ? => $fallback: expr $( , ) ?) * ) => {
153+ $crate:: downcast_integer_array!( $( $values) ,+ => $e $( $p $( if $pred) ? => $fallback, ) * )
154+ } ;
155+ // Turn $e into a block & remove $values parentheses.
156+ ( ( $( $values: ident) ,+) => $e: expr, $( $p: pat $( if $pred: expr) ? => $fallback: expr $( , ) ?) * ) => {
157+ $crate:: downcast_integer_array!( $( $values) ,+ => { $e} $( $p $( if $pred) ? => $fallback, ) * )
158+ } ;
156159}
157160
158161/// Given one or more expressions evaluating to an integer [`DataType`] invokes the provided macro
@@ -189,7 +192,7 @@ macro_rules! downcast_integer_array {
189192/// [`DataType`]: arrow_schema::DataType
190193#[ macro_export]
191194macro_rules! downcast_run_end_index {
192- ( $( $data_type: expr) ,+ => ( $m: path $( , $args: tt) * ) , $( $p: pat $( if $pred: expr) * => $fallback: expr $( , ) * ) * ) => {
195+ ( $( $data_type: expr) ,+ => ( $m: path $( , $args: tt) * ) , $( $p: pat $( if $pred: expr) ? => $fallback: expr $( , ) ? ) * ) => {
193196 match ( $( $data_type) ,+) {
194197 $crate:: repeat_pat!( $crate:: cast:: __private:: DataType :: Int16 , $( $data_type) ,+) => {
195198 $m!( $crate:: types:: Int16Type $( , $args) * )
@@ -200,7 +203,7 @@ macro_rules! downcast_run_end_index {
200203 $crate:: repeat_pat!( $crate:: cast:: __private:: DataType :: Int64 , $( $data_type) ,+) => {
201204 $m!( $crate:: types:: Int64Type $( , $args) * )
202205 }
203- $( $p $( if $pred) * => $fallback, ) *
206+ $( $p $( if $pred) ? => $fallback, ) *
204207 }
205208 } ;
206209}
@@ -234,7 +237,7 @@ macro_rules! downcast_run_end_index {
234237/// [`DataType`]: arrow_schema::DataType
235238#[ macro_export]
236239macro_rules! downcast_temporal {
237- ( $( $data_type: expr) ,+ => ( $m: path $( , $args: tt) * ) , $( $p: pat $( if $pred: expr) * => $fallback: expr $( , ) * ) * ) => {
240+ ( $( $data_type: expr) ,+ => ( $m: path $( , $args: tt) * ) , $( $p: pat $( if $pred: expr) ? => $fallback: expr $( , ) ? ) * ) => {
238241 match ( $( $data_type) ,+) {
239242 $crate:: repeat_pat!( $crate:: cast:: __private:: DataType :: Time32 ( $crate:: cast:: __private:: TimeUnit :: Second ) , $( $data_type) ,+) => {
240243 $m!( $crate:: types:: Time32SecondType $( , $args) * )
@@ -266,7 +269,7 @@ macro_rules! downcast_temporal {
266269 $crate:: repeat_pat!( $crate:: cast:: __private:: DataType :: Timestamp ( $crate:: cast:: __private:: TimeUnit :: Nanosecond , _) , $( $data_type) ,+) => {
267270 $m!( $crate:: types:: TimestampNanosecondType $( , $args) * )
268271 }
269- $( $p $( if $pred) * => $fallback, ) *
272+ $( $p $( if $pred) ? => $fallback, ) *
270273 }
271274 } ;
272275}
@@ -304,21 +307,24 @@ macro_rules! downcast_temporal {
304307/// [`DataType`]: arrow_schema::DataType
305308#[ macro_export]
306309macro_rules! downcast_temporal_array {
307- ( $values: ident => $e: expr, $( $p: pat $( if $pred: expr) * => $fallback: expr $( , ) * ) * ) => {
308- $crate:: downcast_temporal_array!( $values => { $e} $( $p $( if $pred) * => $fallback) * )
309- } ;
310- ( ( $( $values: ident) ,+) => $e: expr, $( $p: pat $( if $pred: expr) * => $fallback: expr $( , ) * ) * ) => {
311- $crate:: downcast_temporal_array!( $( $values) ,+ => { $e} $( $p $( if $pred) * => $fallback) * )
312- } ;
313- ( $( $values: ident) ,+ => $e: block $( $p: pat $( if $pred: expr) * => $fallback: expr $( , ) * ) * ) => {
314- $crate:: downcast_temporal_array!( ( $( $values) ,+) => $e $( $p $( if $pred) * => $fallback) * )
315- } ;
316- ( ( $( $values: ident) ,+) => $e: block $( $p: pat $( if $pred: expr) * => $fallback: expr $( , ) * ) * ) => {
310+ ( $( $values: ident) ,+ => $e: block $( $p: pat $( if $pred: expr) ? => $fallback: expr $( , ) ?) * ) => {
317311 $crate:: downcast_temporal!{
318312 $( $values. data_type( ) ) ,+ => ( $crate:: downcast_primitive_array_helper, $( $values) ,+, $e) ,
319- $( $p $( if $pred) * => $fallback, ) *
313+ $( $p $( if $pred) ? => $fallback, ) *
320314 }
321315 } ;
316+ // Turn $e into a block.
317+ ( $values: ident => $e: expr, $( $p: pat $( if $pred: expr) ? => $fallback: expr $( , ) ?) * ) => {
318+ $crate:: downcast_temporal_array!( $values => { $e} $( $p $( if $pred) ? => $fallback, ) * )
319+ } ;
320+ // Remove $values parentheses.
321+ ( ( $( $values: ident) ,+) => $e: block $( $p: pat $( if $pred: expr) ? => $fallback: expr $( , ) ?) * ) => {
322+ $crate:: downcast_temporal_array!( $( $values) ,+ => $e $( $p $( if $pred) ? => $fallback, ) * )
323+ } ;
324+ // Turn $e into a block & remove $values parentheses.
325+ ( ( $( $values: ident) ,+) => $e: expr, $( $p: pat $( if $pred: expr) ? => $fallback: expr $( , ) ?) * ) => {
326+ $crate:: downcast_temporal_array!( $( $values) ,+ => { $e} $( $p $( if $pred) ? => $fallback, ) * )
327+ } ;
322328}
323329
324330/// Given one or more expressions evaluating to primitive [`DataType`] invokes the provided macro
@@ -353,7 +359,7 @@ macro_rules! downcast_temporal_array {
353359/// [`DataType`]: arrow_schema::DataType
354360#[ macro_export]
355361macro_rules! downcast_primitive {
356- ( $( $data_type: expr) ,+ => ( $m: path $( , $args: tt) * ) , $( $p: pat $( if $pred: expr) * => $fallback: expr $( , ) * ) * ) => {
362+ ( $( $data_type: expr) ,+ => ( $m: path $( , $args: tt) * ) , $( $p: pat $( if $pred: expr) ? => $fallback: expr $( , ) ? ) * ) => {
357363 $crate:: downcast_integer! {
358364 $( $data_type) ,+ => ( $m $( , $args) * ) ,
359365 $crate:: repeat_pat!( $crate:: cast:: __private:: DataType :: Float16 , $( $data_type) ,+) => {
@@ -401,7 +407,7 @@ macro_rules! downcast_primitive {
401407 _ => {
402408 $crate:: downcast_temporal! {
403409 $( $data_type) ,+ => ( $m $( , $args) * ) ,
404- $( $p $( if $pred) * => $fallback, ) *
410+ $( $p $( if $pred) ? => $fallback, ) *
405411 }
406412 }
407413 }
@@ -450,21 +456,24 @@ macro_rules! downcast_primitive_array_helper {
450456/// [`DataType`]: arrow_schema::DataType
451457#[ macro_export]
452458macro_rules! downcast_primitive_array {
453- ( $values: ident => $e: expr, $( $p: pat $( if $pred: expr) * => $fallback: expr $( , ) * ) * ) => {
454- $crate:: downcast_primitive_array!( $values => { $e} $( $p $( if $pred) * => $fallback) * )
455- } ;
456- ( ( $( $values: ident) ,+) => $e: expr, $( $p: pat $( if $pred: expr) * => $fallback: expr $( , ) * ) * ) => {
457- $crate:: downcast_primitive_array!( $( $values) ,+ => { $e} $( $p $( if $pred) * => $fallback) * )
458- } ;
459- ( $( $values: ident) ,+ => $e: block $( $p: pat $( if $pred: expr) * => $fallback: expr $( , ) * ) * ) => {
460- $crate:: downcast_primitive_array!( ( $( $values) ,+) => $e $( $p $( if $pred) * => $fallback) * )
461- } ;
462- ( ( $( $values: ident) ,+) => $e: block $( $p: pat $( if $pred: expr) * => $fallback: expr $( , ) * ) * ) => {
459+ ( $( $values: ident) ,+ => $e: block $( $p: pat $( if $pred: expr) ? => $fallback: expr $( , ) ?) * ) => {
463460 $crate:: downcast_primitive!{
464461 $( $values. data_type( ) ) ,+ => ( $crate:: downcast_primitive_array_helper, $( $values) ,+, $e) ,
465- $( $p $( if $pred) * => $fallback, ) *
462+ $( $p $( if $pred) ? => $fallback, ) *
466463 }
467464 } ;
465+ // Turn $e into a block.
466+ ( $values: ident => $e: expr, $( $p: pat $( if $pred: expr) ? => $fallback: expr $( , ) ?) * ) => {
467+ $crate:: downcast_primitive_array!( $values => { $e} $( $p $( if $pred) ? => $fallback, ) * )
468+ } ;
469+ // Remove $values parentheses.
470+ ( ( $( $values: ident) ,+) => $e: block $( $p: pat $( if $pred: expr) ? => $fallback: expr $( , ) ?) * ) => {
471+ $crate:: downcast_primitive_array!( $( $values) ,+ => $e $( $p $( if $pred) ? => $fallback, ) * )
472+ } ;
473+ // Turn $e into a block & remove $values parentheses.
474+ ( ( $( $values: ident) ,+) => $e: expr, $( $p: pat $( if $pred: expr) ? => $fallback: expr $( , ) ?) * ) => {
475+ $crate:: downcast_primitive_array!( $( $values) ,+ => { $e} $( $p $( if $pred) ? => $fallback, ) * )
476+ } ;
468477}
469478
470479/// Force downcast of an [`Array`], such as an [`ArrayRef`], to
@@ -546,19 +555,19 @@ macro_rules! downcast_dictionary_array_helper {
546555/// [`DataType`]: arrow_schema::DataType
547556#[ macro_export]
548557macro_rules! downcast_dictionary_array {
549- ( $values: ident => $e: expr, $( $p: pat $( if $pred: expr) * => $fallback: expr $( , ) * ) * ) => {
550- downcast_dictionary_array!( $values => { $e} $( $p $( if $pred) * => $fallback) * )
558+ ( $values: ident => $e: expr, $( $p: pat $( if $pred: expr) ? => $fallback: expr $( , ) ? ) * ) => {
559+ downcast_dictionary_array!( $values => { $e} $( $p $( if $pred) ? => $fallback, ) * )
551560 } ;
552561
553- ( $values: ident => $e: block $( $p: pat $( if $pred: expr) * => $fallback: expr $( , ) * ) * ) => {
562+ ( $values: ident => $e: block $( $p: pat $( if $pred: expr) ? => $fallback: expr $( , ) ? ) * ) => {
554563 match $values. data_type( ) {
555564 $crate:: cast:: __private:: DataType :: Dictionary ( k, _) => {
556565 $crate:: downcast_integer! {
557566 k. as_ref( ) => ( $crate:: downcast_dictionary_array_helper, $values, $e) ,
558567 k => unreachable!( "unsupported dictionary key type: {}" , k)
559568 }
560569 }
561- $( $p $( if $pred) * => $fallback, ) *
570+ $( $p $( if $pred) ? => $fallback, ) *
562571 }
563572 }
564573}
@@ -654,19 +663,19 @@ macro_rules! downcast_run_array_helper {
654663/// [`DataType`]: arrow_schema::DataType
655664#[ macro_export]
656665macro_rules! downcast_run_array {
657- ( $values: ident => $e: expr, $( $p: pat $( if $pred: expr) * => $fallback: expr $( , ) * ) * ) => {
658- downcast_run_array!( $values => { $e} $( $p $( if $pred) * => $fallback) * )
666+ ( $values: ident => $e: expr, $( $p: pat $( if $pred: expr) ? => $fallback: expr $( , ) ? ) * ) => {
667+ downcast_run_array!( $values => { $e} $( $p $( if $pred) ? => $fallback, ) * )
659668 } ;
660669
661- ( $values: ident => $e: block $( $p: pat $( if $pred: expr) * => $fallback: expr $( , ) * ) * ) => {
670+ ( $values: ident => $e: block $( $p: pat $( if $pred: expr) ? => $fallback: expr $( , ) ? ) * ) => {
662671 match $values. data_type( ) {
663672 $crate:: cast:: __private:: DataType :: RunEndEncoded ( k, _) => {
664673 $crate:: downcast_run_end_index! {
665674 k. data_type( ) => ( $crate:: downcast_run_array_helper, $values, $e) ,
666675 k => unreachable!( "unsupported run end index type: {}" , k)
667676 }
668677 }
669- $( $p $( if $pred) * => $fallback, ) *
678+ $( $p $( if $pred) ? => $fallback, ) *
670679 }
671680 }
672681}
0 commit comments