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}