mf_expression/functions/
mod.rs1pub use crate::functions::date_method::DateMethod;
6pub use crate::functions::defs::FunctionTypecheck;
7pub use crate::functions::deprecated::DeprecatedFunction;
8pub use crate::functions::internal::InternalFunction;
9pub use crate::functions::method::{MethodKind, MethodRegistry};
10pub use crate::functions::registry::FunctionRegistry;
11pub use crate::functions::mf_function::MfFunction;
12pub use crate::functions::state_guard::{StateGuard, with_state_async};
13
14use std::fmt::Display;
15use strum_macros::{Display, EnumIter, EnumString, IntoStaticStr};
16
17pub mod arguments; mod date_method; pub mod defs; mod deprecated; pub mod internal; mod method; pub mod mf_function;
24pub(crate) mod registry; pub mod state_guard; #[derive(Debug, PartialEq, Eq, Clone)]
31pub enum FunctionKind {
32 Internal(InternalFunction),
34 Deprecated(DeprecatedFunction),
36 Closure(ClosureFunction),
38 Mf(MfFunction),
40}
41
42impl TryFrom<&str> for FunctionKind {
43 type Error = strum::ParseError;
44
45 fn try_from(value: &str) -> Result<Self, Self::Error> {
49 InternalFunction::try_from(value)
50 .map(FunctionKind::Internal)
51 .or_else(|_| {
52 DeprecatedFunction::try_from(value)
53 .map(FunctionKind::Deprecated)
54 })
55 .or_else(|_| {
56 ClosureFunction::try_from(value).map(FunctionKind::Closure)
57 })
58 .or_else(|_| MfFunction::try_from(value).map(FunctionKind::Mf))
59 }
60}
61
62impl Display for FunctionKind {
63 fn fmt(
64 &self,
65 f: &mut std::fmt::Formatter<'_>,
66 ) -> std::fmt::Result {
67 match self {
68 FunctionKind::Internal(i) => write!(f, "{i}"),
69 FunctionKind::Deprecated(d) => write!(f, "{d}"),
70 FunctionKind::Closure(c) => write!(f, "{c}"),
71 FunctionKind::Mf(m) => write!(f, "{m}"),
72 }
73 }
74}
75
76#[derive(
80 Debug,
81 PartialEq,
82 Eq,
83 Hash,
84 Display,
85 EnumString,
86 EnumIter,
87 IntoStaticStr,
88 Clone,
89 Copy,
90)]
91#[strum(serialize_all = "camelCase")]
92pub enum ClosureFunction {
93 All,
95 None,
97 Some,
99 One,
101 Filter,
103 Map,
105 FlatMap,
107 Count,
109}