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}