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