zen_expression/functions/
mod.rs1pub 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}