zen_expression/functions/
mod.rs

1pub use crate::functions::date_method::DateMethod;
2pub use crate::functions::defs::FunctionTypecheck;
3pub use crate::functions::deprecated::DeprecatedFunction;
4pub use crate::functions::internal::InternalFunction;
5pub use crate::functions::method::{MethodKind, MethodRegistry};
6pub use crate::functions::registry::FunctionRegistry;
7
8use std::fmt::Display;
9use strum_macros::{Display, EnumIter, EnumString, IntoStaticStr};
10
11pub(crate) mod arguments;
12mod date_method;
13pub(crate) mod defs;
14mod deprecated;
15pub(crate) mod internal;
16mod method;
17pub(crate) mod registry;
18
19#[derive(Debug, PartialEq, Eq, Clone)]
20pub enum FunctionKind {
21    Internal(InternalFunction),
22    Deprecated(DeprecatedFunction),
23    Closure(ClosureFunction),
24}
25
26impl TryFrom<&str> for FunctionKind {
27    type Error = strum::ParseError;
28
29    fn try_from(value: &str) -> Result<Self, Self::Error> {
30        InternalFunction::try_from(value)
31            .map(FunctionKind::Internal)
32            .or_else(|_| DeprecatedFunction::try_from(value).map(FunctionKind::Deprecated))
33            .or_else(|_| ClosureFunction::try_from(value).map(FunctionKind::Closure))
34    }
35}
36
37impl Display for FunctionKind {
38    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
39        match self {
40            FunctionKind::Internal(i) => write!(f, "{i}"),
41            FunctionKind::Deprecated(d) => write!(f, "{d}"),
42            FunctionKind::Closure(c) => write!(f, "{c}"),
43        }
44    }
45}
46
47#[derive(Debug, PartialEq, Eq, Hash, Display, EnumString, EnumIter, IntoStaticStr, Clone, Copy)]
48#[strum(serialize_all = "camelCase")]
49pub enum ClosureFunction {
50    All,
51    None,
52    Some,
53    One,
54    Filter,
55    Map,
56    FlatMap,
57    Count,
58}