tinc_build/codegen/cel/functions/
mod.rs

1mod all;
2mod bool;
3mod bytes;
4mod contains;
5mod double;
6mod dyn_;
7mod ends_with;
8mod enum_;
9mod exists;
10mod exists_one;
11mod filter;
12mod has;
13mod int;
14mod is_email;
15mod is_hostname;
16mod is_inf;
17mod is_ipv4;
18mod is_ipv6;
19mod is_nan;
20mod is_ulid;
21mod is_uri;
22mod is_uuid;
23mod map;
24mod matches;
25mod size;
26mod starts_with;
27mod string;
28mod uint;
29
30pub(crate) use all::All;
31pub(crate) use bool::Bool;
32pub(crate) use bytes::Bytes;
33pub(crate) use contains::Contains;
34pub(crate) use double::Double;
35pub(crate) use dyn_::Dyn;
36pub(crate) use ends_with::EndsWith;
37pub(crate) use enum_::Enum;
38pub(crate) use exists::Exists;
39pub(crate) use exists_one::ExistsOne;
40pub(crate) use filter::Filter;
41pub(crate) use has::Has;
42pub(crate) use int::Int;
43pub(crate) use is_email::IsEmail;
44pub(crate) use is_hostname::IsHostname;
45pub(crate) use is_inf::IsInf;
46pub(crate) use is_ipv4::IsIpv4;
47pub(crate) use is_ipv6::IsIpv6;
48pub(crate) use is_nan::IsNaN;
49pub(crate) use is_ulid::IsUlid;
50pub(crate) use is_uri::IsUri;
51pub(crate) use is_uuid::IsUuid;
52pub(crate) use map::Map;
53pub(crate) use matches::Matches;
54pub(crate) use size::Size;
55pub(crate) use starts_with::StartsWith;
56pub(crate) use string::String;
57pub(crate) use uint::UInt;
58
59use super::compiler::{CompileError, CompiledExpr, Compiler, CompilerCtx};
60
61pub(crate) fn add_to_compiler(compiler: &mut Compiler) {
62    Contains.add_to_compiler(compiler);
63    Size.add_to_compiler(compiler);
64    Has.add_to_compiler(compiler);
65    Map.add_to_compiler(compiler);
66    Filter.add_to_compiler(compiler);
67    All.add_to_compiler(compiler);
68    Exists.add_to_compiler(compiler);
69    ExistsOne.add_to_compiler(compiler);
70    StartsWith.add_to_compiler(compiler);
71    EndsWith.add_to_compiler(compiler);
72    Matches.add_to_compiler(compiler);
73    String.add_to_compiler(compiler);
74    Bytes.add_to_compiler(compiler);
75    Int.add_to_compiler(compiler);
76    UInt.add_to_compiler(compiler);
77    Double.add_to_compiler(compiler);
78    Bool.add_to_compiler(compiler);
79    Enum::default().add_to_compiler(compiler);
80    IsIpv4.add_to_compiler(compiler);
81    IsIpv6.add_to_compiler(compiler);
82    IsUuid.add_to_compiler(compiler);
83    IsUlid.add_to_compiler(compiler);
84    IsHostname.add_to_compiler(compiler);
85    IsUri.add_to_compiler(compiler);
86    IsEmail.add_to_compiler(compiler);
87    IsNaN.add_to_compiler(compiler);
88    IsInf.add_to_compiler(compiler);
89    Dyn.add_to_compiler(compiler);
90}
91
92pub(crate) trait Function: Send + Sync + 'static {
93    fn name(&self) -> &'static str;
94
95    fn syntax(&self) -> &'static str;
96
97    fn compile(&self, ctx: CompilerCtx) -> Result<CompiledExpr, CompileError>;
98
99    fn add_to_compiler(self, ctx: &mut Compiler)
100    where
101        Self: Sized,
102    {
103        ctx.register_function(self);
104    }
105}