1use anyhow::{bail, Result};
18
19use self::traits::{Builtin, BuiltinFunc};
20use crate::EvaluationContext;
21
22pub mod impls;
23pub mod traits;
24
25#[allow(clippy::too_many_lines)]
31pub fn resolve<C: EvaluationContext>(name: &str) -> Result<Box<dyn Builtin<C>>> {
32 match name {
33 #[cfg(feature = "base64url-builtins")]
34 "base64url.encode_no_pad" => Ok(self::impls::base64url::encode_no_pad.wrap()),
35
36 #[cfg(all(feature = "crypto-md5-builtins", feature = "crypto-hmac-builtins"))]
37 "crypto.hmac.md5" => Ok(self::impls::crypto::hmac::md5.wrap()),
38
39 #[cfg(all(feature = "crypto-sha1-builtins", feature = "crypto-hmac-builtins"))]
40 "crypto.hmac.sha1" => Ok(self::impls::crypto::hmac::sha1.wrap()),
41
42 #[cfg(all(feature = "crypto-sha2-builtins", feature = "crypto-hmac-builtins"))]
43 "crypto.hmac.sha256" => Ok(self::impls::crypto::hmac::sha256.wrap()),
44
45 #[cfg(all(feature = "crypto-sha2-builtins", feature = "crypto-hmac-builtins"))]
46 "crypto.hmac.sha512" => Ok(self::impls::crypto::hmac::sha512.wrap()),
47
48 #[cfg(all(feature = "crypto-md5-builtins", feature = "crypto-digest-builtins"))]
49 "crypto.md5" => Ok(self::impls::crypto::digest::md5.wrap()),
50
51 #[cfg(all(feature = "crypto-sha1-builtins", feature = "crypto-digest-builtins"))]
52 "crypto.sha1" => Ok(self::impls::crypto::digest::sha1.wrap()),
53
54 #[cfg(all(feature = "crypto-sha2-builtins", feature = "crypto-digest-builtins"))]
55 "crypto.sha256" => Ok(self::impls::crypto::digest::sha256.wrap()),
56
57 "crypto.x509.parse_and_verify_certificates" => {
58 Ok(self::impls::crypto::x509::parse_and_verify_certificates.wrap())
59 }
60 "crypto.x509.parse_certificate_request" => {
61 Ok(self::impls::crypto::x509::parse_certificate_request.wrap())
62 }
63 "crypto.x509.parse_certificates" => {
64 Ok(self::impls::crypto::x509::parse_certificates.wrap())
65 }
66 "crypto.x509.parse_rsa_private_key" => {
67 Ok(self::impls::crypto::x509::parse_rsa_private_key.wrap())
68 }
69 "glob.quote_meta" => Ok(self::impls::glob::quote_meta.wrap()),
70 "graph.reachable_paths" => Ok(self::impls::graph::reachable_paths.wrap()),
71 "graphql.is_valid" => Ok(self::impls::graphql::is_valid.wrap()),
72 "graphql.parse" => Ok(self::impls::graphql::parse.wrap()),
73 "graphql.parse_and_verify" => Ok(self::impls::graphql::parse_and_verify.wrap()),
74 "graphql.parse_query" => Ok(self::impls::graphql::parse_query.wrap()),
75 "graphql.parse_schema" => Ok(self::impls::graphql::parse_schema.wrap()),
76
77 #[cfg(feature = "hex-builtins")]
78 "hex.decode" => Ok(self::impls::hex::decode.wrap()),
79
80 #[cfg(feature = "hex-builtins")]
81 "hex.encode" => Ok(self::impls::hex::encode.wrap()),
82
83 "http.send" => Ok(self::impls::http::send.wrap()),
84 "indexof_n" => Ok(self::impls::indexof_n.wrap()),
85 "io.jwt.decode" => Ok(self::impls::io::jwt::decode.wrap()),
86 "io.jwt.decode_verify" => Ok(self::impls::io::jwt::decode_verify.wrap()),
87 "io.jwt.encode_sign" => Ok(self::impls::io::jwt::encode_sign.wrap()),
88 "io.jwt.encode_sign_raw" => Ok(self::impls::io::jwt::encode_sign_raw.wrap()),
89 "io.jwt.verify_es256" => Ok(self::impls::io::jwt::verify_es256.wrap()),
90 "io.jwt.verify_es384" => Ok(self::impls::io::jwt::verify_es384.wrap()),
91 "io.jwt.verify_es512" => Ok(self::impls::io::jwt::verify_es512.wrap()),
92 "io.jwt.verify_hs256" => Ok(self::impls::io::jwt::verify_hs256.wrap()),
93 "io.jwt.verify_hs384" => Ok(self::impls::io::jwt::verify_hs384.wrap()),
94 "io.jwt.verify_hs512" => Ok(self::impls::io::jwt::verify_hs512.wrap()),
95 "io.jwt.verify_ps256" => Ok(self::impls::io::jwt::verify_ps256.wrap()),
96 "io.jwt.verify_ps384" => Ok(self::impls::io::jwt::verify_ps384.wrap()),
97 "io.jwt.verify_ps512" => Ok(self::impls::io::jwt::verify_ps512.wrap()),
98 "io.jwt.verify_rs256" => Ok(self::impls::io::jwt::verify_rs256.wrap()),
99 "io.jwt.verify_rs384" => Ok(self::impls::io::jwt::verify_rs384.wrap()),
100 "io.jwt.verify_rs512" => Ok(self::impls::io::jwt::verify_rs512.wrap()),
101
102 #[cfg(feature = "json-builtins")]
103 "json.patch" => Ok(self::impls::json::patch.wrap()),
104
105 "net.cidr_contains_matches" => Ok(self::impls::net::cidr_contains_matches.wrap()),
106 "net.cidr_expand" => Ok(self::impls::net::cidr_expand.wrap()),
107 "net.cidr_merge" => Ok(self::impls::net::cidr_merge.wrap()),
108 "net.lookup_ip_addr" => Ok(self::impls::net::lookup_ip_addr.wrap()),
109 "object.union_n" => Ok(self::impls::object::union_n.wrap()),
110 "opa.runtime" => Ok(self::impls::opa::runtime.wrap()),
111
112 #[cfg(feature = "rng")]
113 "rand.intn" => Ok(self::impls::rand::intn.wrap()),
114
115 "regex.find_n" => Ok(self::impls::regex::find_n.wrap()),
116 "regex.globs_match" => Ok(self::impls::regex::globs_match.wrap()),
117 "regex.split" => Ok(self::impls::regex::split.wrap()),
118 "regex.template_match" => Ok(self::impls::regex::template_match.wrap()),
119 "rego.parse_module" => Ok(self::impls::rego::parse_module.wrap()),
120
121 #[cfg(feature = "semver-builtins")]
122 "semver.compare" => Ok(self::impls::semver::compare.wrap()),
123
124 #[cfg(feature = "semver-builtins")]
125 "semver.is_valid" => Ok(self::impls::semver::is_valid.wrap()),
126
127 #[cfg(feature = "sprintf-builtins")]
128 "sprintf" => Ok(self::impls::sprintf.wrap()),
129
130 #[cfg(feature = "time-builtins")]
131 "time.add_date" => Ok(self::impls::time::add_date.wrap()),
132
133 #[cfg(feature = "time-builtins")]
134 "time.clock" => Ok(self::impls::time::clock.wrap()),
135
136 #[cfg(feature = "time-builtins")]
137 "time.date" => Ok(self::impls::time::date.wrap()),
138
139 #[cfg(feature = "time-builtins")]
140 "time.diff" => Ok(self::impls::time::diff.wrap()),
141
142 #[cfg(feature = "time-builtins")]
143 "time.now_ns" => Ok(self::impls::time::now_ns.wrap()),
144
145 #[cfg(feature = "time-builtins")]
146 "time.parse_duration_ns" => Ok(self::impls::time::parse_duration_ns.wrap()),
147
148 #[cfg(feature = "time-builtins")]
149 "time.parse_ns" => Ok(self::impls::time::parse_ns.wrap()),
150
151 #[cfg(feature = "time-builtins")]
152 "time.parse_rfc3339_ns" => Ok(self::impls::time::parse_rfc3339_ns.wrap()),
153
154 #[cfg(feature = "time-builtins")]
155 "time.weekday" => Ok(self::impls::time::weekday.wrap()),
156
157 "trace" => Ok(self::impls::trace.wrap()),
158
159 #[cfg(feature = "units-builtins")]
160 "units.parse" => Ok(self::impls::units::parse.wrap()),
161
162 #[cfg(feature = "units-builtins")]
163 "units.parse_bytes" => Ok(self::impls::units::parse_bytes.wrap()),
164
165 #[cfg(feature = "urlquery-builtins")]
166 "urlquery.decode" => Ok(self::impls::urlquery::decode.wrap()),
167
168 #[cfg(feature = "urlquery-builtins")]
169 "urlquery.decode_object" => Ok(self::impls::urlquery::decode_object.wrap()),
170
171 #[cfg(feature = "urlquery-builtins")]
172 "urlquery.encode" => Ok(self::impls::urlquery::encode.wrap()),
173
174 #[cfg(feature = "urlquery-builtins")]
175 "urlquery.encode_object" => Ok(self::impls::urlquery::encode_object.wrap()),
176
177 "uuid.rfc4122" => Ok(self::impls::uuid::rfc4122.wrap()),
178
179 #[cfg(feature = "yaml-builtins")]
180 "yaml.is_valid" => Ok(self::impls::yaml::is_valid.wrap()),
181
182 #[cfg(feature = "yaml-builtins")]
183 "yaml.marshal" => Ok(self::impls::yaml::marshal.wrap()),
184
185 #[cfg(feature = "yaml-builtins")]
186 "yaml.unmarshal" => Ok(self::impls::yaml::unmarshal.wrap()),
187 _ => bail!("unknown builtin"),
188 }
189}