Skip to main content

vortex_array/
matcher.rs

1// SPDX-License-Identifier: Apache-2.0
2// SPDX-FileCopyrightText: Copyright the Vortex contributors
3
4use crate::Array;
5
6/// Trait for matching array types.
7pub trait Matcher {
8    type Match<'a>;
9
10    /// Check if the given array matches this matcher type
11    fn matches(array: &dyn Array) -> bool {
12        Self::try_match(array).is_some()
13    }
14
15    /// Try to match the given array, returning the matched view type if successful.
16    fn try_match<'a>(array: &'a dyn Array) -> Option<Self::Match<'a>>;
17}
18
19/// Matches any array type (wildcard matcher)
20#[derive(Debug)]
21pub struct AnyArray;
22
23impl Matcher for AnyArray {
24    type Match<'a> = &'a dyn Array;
25
26    #[inline(always)]
27    fn matches(_array: &dyn Array) -> bool {
28        true
29    }
30
31    #[inline(always)]
32    fn try_match(array: &dyn Array) -> Option<Self::Match<'_>> {
33        Some(array)
34    }
35}