fiddler_script/builtins/
mod.rs1mod bytes;
7mod collections;
8mod compression;
9mod core;
10mod encoding;
11mod json;
12mod math;
13mod strings;
14mod time;
15
16use std::collections::HashMap;
17
18use crate::error::RuntimeError;
19use crate::Value;
20
21pub use json::json_to_value;
23
24pub type BuiltinFn = fn(Vec<Value>) -> Result<Value, RuntimeError>;
26
27pub fn get_default_builtins() -> HashMap<String, BuiltinFn> {
29 let mut builtins: HashMap<String, BuiltinFn> = HashMap::new();
30
31 builtins.insert("print".to_string(), core::builtin_print);
33 builtins.insert("len".to_string(), core::builtin_len);
34 builtins.insert("str".to_string(), core::builtin_str);
35 builtins.insert("int".to_string(), core::builtin_int);
36 builtins.insert("float".to_string(), core::builtin_float);
37 builtins.insert("getenv".to_string(), core::builtin_getenv);
38
39 builtins.insert("abs".to_string(), math::builtin_abs);
41 builtins.insert("ceil".to_string(), math::builtin_ceil);
42 builtins.insert("floor".to_string(), math::builtin_floor);
43 builtins.insert("round".to_string(), math::builtin_round);
44
45 builtins.insert("timestamp".to_string(), time::builtin_timestamp);
47 builtins.insert("epoch".to_string(), time::builtin_epoch);
48 builtins.insert(
49 "timestamp_millis".to_string(),
50 time::builtin_timestamp_millis,
51 );
52 builtins.insert(
53 "timestamp_micros".to_string(),
54 time::builtin_timestamp_micros,
55 );
56 builtins.insert(
57 "timestamp_iso8601".to_string(),
58 time::builtin_timestamp_iso8601,
59 );
60
61 builtins.insert("parse_json".to_string(), json::builtin_parse_json);
63
64 builtins.insert(
66 "bytes_to_string".to_string(),
67 bytes::builtin_bytes_to_string,
68 );
69 builtins.insert("bytes".to_string(), bytes::builtin_bytes);
70
71 builtins.insert("array".to_string(), collections::builtin_array);
73 builtins.insert("push".to_string(), collections::builtin_push);
74 builtins.insert("get".to_string(), collections::builtin_get);
75 builtins.insert("set".to_string(), collections::builtin_set);
76 builtins.insert("dict".to_string(), collections::builtin_dict);
77 builtins.insert("keys".to_string(), collections::builtin_keys);
78 builtins.insert("is_array".to_string(), collections::builtin_is_array);
79 builtins.insert("is_dict".to_string(), collections::builtin_is_dict);
80 builtins.insert("delete".to_string(), collections::builtin_delete);
81 builtins.insert("contains".to_string(), collections::builtin_contains);
82
83 builtins.insert(
85 "gzip_compress".to_string(),
86 compression::builtin_gzip_compress,
87 );
88 builtins.insert(
89 "gzip_decompress".to_string(),
90 compression::builtin_gzip_decompress,
91 );
92 builtins.insert(
93 "zlib_compress".to_string(),
94 compression::builtin_zlib_compress,
95 );
96 builtins.insert(
97 "zlib_decompress".to_string(),
98 compression::builtin_zlib_decompress,
99 );
100 builtins.insert(
101 "deflate_compress".to_string(),
102 compression::builtin_deflate_compress,
103 );
104 builtins.insert(
105 "deflate_decompress".to_string(),
106 compression::builtin_deflate_decompress,
107 );
108
109 builtins.insert("base64_encode".to_string(), encoding::builtin_base64_encode);
111 builtins.insert("base64_decode".to_string(), encoding::builtin_base64_decode);
112
113 builtins.insert("lines".to_string(), strings::builtin_lines);
115 builtins.insert("capitalize".to_string(), strings::builtin_capitalize);
116 builtins.insert("lowercase".to_string(), strings::builtin_lowercase);
117 builtins.insert("uppercase".to_string(), strings::builtin_uppercase);
118 builtins.insert("trim".to_string(), strings::builtin_trim);
119 builtins.insert("trim_prefix".to_string(), strings::builtin_trim_prefix);
120 builtins.insert("trim_suffix".to_string(), strings::builtin_trim_suffix);
121 builtins.insert("has_prefix".to_string(), strings::builtin_has_prefix);
122 builtins.insert("has_suffix".to_string(), strings::builtin_has_suffix);
123 builtins.insert("split".to_string(), strings::builtin_split);
124 builtins.insert("reverse".to_string(), strings::builtin_reverse);
125
126 builtins
127}
128
129#[cfg(test)]
130mod tests {
131 use super::*;
132
133 #[test]
134 fn test_default_builtins() {
135 let builtins = get_default_builtins();
136
137 assert!(builtins.contains_key("print"));
139 assert!(builtins.contains_key("len"));
140 assert!(builtins.contains_key("str"));
141 assert!(builtins.contains_key("int"));
142 assert!(builtins.contains_key("getenv"));
143
144 assert!(builtins.contains_key("abs"));
146 assert!(builtins.contains_key("ceil"));
147 assert!(builtins.contains_key("floor"));
148 assert!(builtins.contains_key("round"));
149
150 assert!(builtins.contains_key("timestamp"));
152 assert!(builtins.contains_key("epoch"));
153 assert!(builtins.contains_key("timestamp_millis"));
154 assert!(builtins.contains_key("timestamp_micros"));
155 assert!(builtins.contains_key("timestamp_iso8601"));
156
157 assert!(builtins.contains_key("parse_json"));
159
160 assert!(builtins.contains_key("bytes_to_string"));
162 assert!(builtins.contains_key("bytes"));
163
164 assert!(builtins.contains_key("array"));
166 assert!(builtins.contains_key("push"));
167 assert!(builtins.contains_key("get"));
168 assert!(builtins.contains_key("set"));
169 assert!(builtins.contains_key("dict"));
170 assert!(builtins.contains_key("keys"));
171 assert!(builtins.contains_key("is_array"));
172 assert!(builtins.contains_key("is_dict"));
173 assert!(builtins.contains_key("delete"));
174 assert!(builtins.contains_key("contains"));
175
176 assert!(builtins.contains_key("gzip_compress"));
178 assert!(builtins.contains_key("gzip_decompress"));
179 assert!(builtins.contains_key("zlib_compress"));
180 assert!(builtins.contains_key("zlib_decompress"));
181 assert!(builtins.contains_key("deflate_compress"));
182 assert!(builtins.contains_key("deflate_decompress"));
183
184 assert!(builtins.contains_key("base64_encode"));
186 assert!(builtins.contains_key("base64_decode"));
187
188 assert!(builtins.contains_key("lines"));
190 assert!(builtins.contains_key("capitalize"));
191 assert!(builtins.contains_key("lowercase"));
192 assert!(builtins.contains_key("uppercase"));
193 assert!(builtins.contains_key("trim"));
194 assert!(builtins.contains_key("trim_prefix"));
195 assert!(builtins.contains_key("trim_suffix"));
196 assert!(builtins.contains_key("has_prefix"));
197 assert!(builtins.contains_key("has_suffix"));
198 assert!(builtins.contains_key("split"));
199 assert!(builtins.contains_key("reverse"));
200 }
201}