1use strum_macros::{Display, EnumIter, EnumString, IntoStaticStr};
2
3#[derive(Debug, PartialEq)]
4pub(crate) enum Arity {
5 Single,
6 Closure,
7 Dual,
8}
9
10#[derive(Debug, PartialEq, Eq, Clone, Copy, EnumString, Display, IntoStaticStr, EnumIter)]
11#[strum(serialize_all = "camelCase")]
12pub enum BuiltInFunction {
13 Len,
15 Contains,
16 Flatten,
17
18 Upper,
20 Lower,
21 Trim,
22 StartsWith,
23 EndsWith,
24 Matches,
25 Extract,
26 FuzzyMatch,
27 Split,
28
29 Abs,
31 Sum,
32 Avg,
33 Min,
34 Max,
35 Rand,
36 Median,
37 Mode,
38 Floor,
39 Ceil,
40 Round,
41
42 IsNumeric,
44 String,
45 Number,
46 Bool,
47 Type,
48
49 Date,
51 Time,
52 Duration,
53 Year,
54 DayOfWeek,
55 DayOfMonth,
56 DayOfYear,
57 WeekOfYear,
58 MonthOfYear,
59 MonthString,
60 DateString,
61 WeekdayString,
62 StartOf,
63 EndOf,
64
65 Keys,
67 Values,
68
69 All,
71 Some,
72 None,
73 Filter,
74 Map,
75 Count,
76 One,
77 FlatMap,
78}
79
80impl BuiltInFunction {
81 pub(crate) fn arity(&self) -> Arity {
82 match &self {
83 BuiltInFunction::Len => Arity::Single,
85 BuiltInFunction::Contains => Arity::Dual,
86 BuiltInFunction::Flatten => Arity::Single,
87
88 BuiltInFunction::Upper => Arity::Single,
90 BuiltInFunction::Lower => Arity::Single,
91 BuiltInFunction::Trim => Arity::Single,
92 BuiltInFunction::StartsWith => Arity::Dual,
93 BuiltInFunction::EndsWith => Arity::Dual,
94 BuiltInFunction::Matches => Arity::Dual,
95 BuiltInFunction::Extract => Arity::Dual,
96 BuiltInFunction::FuzzyMatch => Arity::Dual,
97 BuiltInFunction::Split => Arity::Dual,
98
99 BuiltInFunction::Abs => Arity::Single,
101 BuiltInFunction::Sum => Arity::Single,
102 BuiltInFunction::Avg => Arity::Single,
103 BuiltInFunction::Min => Arity::Single,
104 BuiltInFunction::Max => Arity::Single,
105 BuiltInFunction::Rand => Arity::Single,
106 BuiltInFunction::Median => Arity::Single,
107 BuiltInFunction::Mode => Arity::Single,
108 BuiltInFunction::Floor => Arity::Single,
109 BuiltInFunction::Ceil => Arity::Single,
110 BuiltInFunction::Round => Arity::Single,
111
112 BuiltInFunction::Date => Arity::Single,
114 BuiltInFunction::Time => Arity::Single,
115 BuiltInFunction::Duration => Arity::Single,
116 BuiltInFunction::Year => Arity::Single,
117 BuiltInFunction::DayOfWeek => Arity::Single,
118 BuiltInFunction::DayOfMonth => Arity::Single,
119 BuiltInFunction::DayOfYear => Arity::Single,
120 BuiltInFunction::WeekOfYear => Arity::Single,
121 BuiltInFunction::MonthOfYear => Arity::Single,
122 BuiltInFunction::MonthString => Arity::Single,
123 BuiltInFunction::DateString => Arity::Single,
124 BuiltInFunction::WeekdayString => Arity::Single,
125 BuiltInFunction::StartOf => Arity::Dual,
126 BuiltInFunction::EndOf => Arity::Dual,
127
128 BuiltInFunction::String => Arity::Single,
130 BuiltInFunction::Number => Arity::Single,
131 BuiltInFunction::Bool => Arity::Single,
132 BuiltInFunction::IsNumeric => Arity::Single,
133 BuiltInFunction::Type => Arity::Single,
134
135 BuiltInFunction::Keys => Arity::Single,
137 BuiltInFunction::Values => Arity::Single,
138
139 BuiltInFunction::All => Arity::Closure,
141 BuiltInFunction::Some => Arity::Closure,
142 BuiltInFunction::None => Arity::Closure,
143 BuiltInFunction::Filter => Arity::Closure,
144 BuiltInFunction::Map => Arity::Closure,
145 BuiltInFunction::Count => Arity::Closure,
146 BuiltInFunction::One => Arity::Closure,
147 BuiltInFunction::FlatMap => Arity::Closure,
148 }
149 }
150}