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