1use std::sync::{ Once, Mutex };
2use paste::paste;
3
4use super::KnownValuesStore;
5
6#[macro_export]
33macro_rules! const_known_value {
34 ($value:expr, $const_name:ident, $name:expr) => {
35 paste! {
36 pub const [<$const_name _RAW>]: u64 = $value;
37 }
38 pub const $const_name: $crate::KnownValue = $crate::KnownValue::new_with_static_name($value, $name);
39 };
40}
41
42const_known_value!(0, UNIT, "");
49const_known_value!(1, IS_A, "isA");
50const_known_value!(2, ID, "id");
51const_known_value!(3, SIGNED, "signed");
52const_known_value!(4, NOTE, "note");
53const_known_value!(5, HAS_RECIPIENT, "hasRecipient");
54const_known_value!(6, SSKR_SHARE, "sskrShare");
55const_known_value!(7, CONTROLLER, "controller");
56const_known_value!(8, KEY, "key");
57const_known_value!(9, DEREFERENCE_VIA, "dereferenceVia");
58const_known_value!(10, ENTITY, "entity");
59const_known_value!(11, NAME, "name");
60const_known_value!(12, LANGUAGE, "language");
61const_known_value!(13, ISSUER, "issuer");
62const_known_value!(14, HOLDER, "holder");
63const_known_value!(15, SALT, "salt");
64const_known_value!(16, DATE, "date");
65const_known_value!(17, UNKNOWN_VALUE, "Unknown");
66const_known_value!(18, VERSION_VALUE, "version");
67const_known_value!(19, HAS_SECRET, "hasSecret");
68const_known_value!(20, DIFF_EDITS, "edits");
69const_known_value!(21, VALID_FROM, "validFrom");
70const_known_value!(22, VALID_UNTIL, "validUntil");
71const_known_value!(23, POSITION, "position");
72const_known_value!(50, ATTACHMENT, "attachment");
79const_known_value!(51, VENDOR, "vendor");
80const_known_value!(52, CONFORMS_TO, "conformsTo");
81const_known_value!(60, ALLOW, "allow");
88const_known_value!(61, DENY, "deny");
89const_known_value!(62, ENDPOINT, "endpoint");
90const_known_value!(63, DELEGATE, "delegate");
91const_known_value!(64, PROVENANCE, "provenance");
92const_known_value!(65, PRIVATE_KEY, "privateKey");
93const_known_value!(66, SERVICE, "service");
94const_known_value!(67, CAPABILITY, "capability");
95const_known_value!(70, PRIVILEGE_ALL, "All");
102const_known_value!(71, PRIVILEGE_AUTH, "Auth");
103const_known_value!(72, PRIVILEGE_SIGN, "Sign");
104const_known_value!(73, PRIVILEGE_ENCRYPT, "Encrypt");
105const_known_value!(74, PRIVILEGE_ELIDE, "Elide");
106const_known_value!(75, PRIVILEGE_ISSUE, "Issue");
107const_known_value!(76, PRIVILEGE_ACCESS, "Access");
108const_known_value!(80, PRIVILEGE_DELEGATE, "Delegate");
110const_known_value!(81, PRIVILEGE_VERIFY, "Verify");
111const_known_value!(82, PRIVILEGE_UPDATE, "Update");
112const_known_value!(83, PRIVILEGE_TRANSFER, "Transfer");
113const_known_value!(84, PRIVILEGE_ELECT, "Elect");
114const_known_value!(85, PRIVILEGE_BURN, "Burn");
115const_known_value!(86, PRIVILEGE_REVOKE, "Revoke");
116const_known_value!(100, BODY, "body");
123const_known_value!(101, RESULT, "result");
124const_known_value!(102, ERROR, "error");
125const_known_value!(103, OK_VALUE, "OK");
126const_known_value!(104, PROCESSING_VALUE, "Processing");
127const_known_value!(105, SENDER, "sender");
128const_known_value!(106, SENDER_CONTINUATION, "senderContinuation");
129const_known_value!(107, RECIPIENT_CONTINUATION, "recipientContinuation");
130const_known_value!(108, CONTENT, "content");
131const_known_value!(200, SEED_TYPE, "Seed");
138const_known_value!(201, PRIVATE_KEY_TYPE, "PrivateKey");
139const_known_value!(202, PUBLIC_KEY_TYPE, "PublicKey");
140const_known_value!(203, MASTER_KEY_TYPE, "MasterKey");
141const_known_value!(300, ASSET, "asset");
148const_known_value!(301, BITCOIN_VALUE, "BTC");
149const_known_value!(302, ETHEREUM_VALUE, "ETH");
150const_known_value!(303, TEZOS_VALUE, "XTZ");
151const_known_value!(400, NETWORK, "network");
158const_known_value!(401, MAIN_NET_VALUE, "MainNet");
159const_known_value!(402, TEST_NET_VALUE, "TestNet");
160const_known_value!(500, BIP32_KEY_TYPE, "BIP32Key");
167const_known_value!(501, CHAIN_CODE, "chainCode");
168const_known_value!(502, DERIVATION_PATH_TYPE, "DerivationPath");
169const_known_value!(503, PARENT_PATH, "parent");
170const_known_value!(504, CHILDREN_PATH, "children");
171const_known_value!(505, PARENT_FINGERPRINT, "parentFingerprint");
172const_known_value!(506, PSBT_TYPE, "PSBT");
173const_known_value!(507, OUTPUT_DESCRIPTOR_TYPE, "OutputDescriptor");
174const_known_value!(508, OUTPUT_DESCRIPTOR, "outputDescriptor");
175const_known_value!(600, GRAPH, "graph");
182const_known_value!(601, SOURCE_TARGET_GRAPH, "SourceTargetGraph");
183const_known_value!(602, PARENT_CHILD_GRAPH, "ParentChildGraph");
184const_known_value!(603, DIGRAPH, "Digraph");
185const_known_value!(604, ACYCLIC_GRAPH, "AcyclicGraph");
186const_known_value!(605, MULTIGRAPH, "Multigraph");
187const_known_value!(606, PSEUDOGRAPH, "Pseudograph");
188const_known_value!(607, GRAPH_FRAGMENT, "GraphFragment");
189const_known_value!(608, DAG, "DAG");
190const_known_value!(609, TREE, "Tree");
191const_known_value!(610, FOREST, "Forest");
192const_known_value!(611, COMPOUND_GRAPH, "CompoundGraph");
193const_known_value!(612, HYPERGRAPH, "Hypergraph");
194const_known_value!(613, DIHYPERGRAPH, "Dihypergraph");
195const_known_value!(700, NODE, "node");
197const_known_value!(701, EDGE, "edge");
198const_known_value!(702, SOURCE, "source");
199const_known_value!(703, TARGET, "target");
200const_known_value!(704, PARENT, "parent");
201const_known_value!(705, CHILD, "child");
202#[doc(hidden)]
219#[derive(Debug)]
220pub struct LazyKnownValues {
221 init: Once,
222 data: Mutex<Option<KnownValuesStore>>,
223}
224
225impl LazyKnownValues {
226 pub fn get(&self) -> std::sync::MutexGuard<'_, Option<KnownValuesStore>> {
231 self.init.call_once(|| {
232 let m = KnownValuesStore::new([
233 UNIT,
234 IS_A,
235 ID,
236 SIGNED,
237 NOTE,
238 HAS_RECIPIENT,
239 SSKR_SHARE,
240 CONTROLLER,
241 KEY,
242 DEREFERENCE_VIA,
243 ENTITY,
244 NAME,
245 LANGUAGE,
246 ISSUER,
247 HOLDER,
248 SALT,
249 DATE,
250 UNKNOWN_VALUE,
251 VERSION_VALUE,
252 HAS_SECRET,
253 DIFF_EDITS,
254 VALID_FROM,
255 VALID_UNTIL,
256 POSITION,
257
258 ATTACHMENT,
259 VENDOR,
260 CONFORMS_TO,
261
262 ALLOW,
263 DENY,
264 ENDPOINT,
265 DELEGATE,
266 PROVENANCE,
267 PRIVATE_KEY,
268 SERVICE,
269 CAPABILITY,
270
271 PRIVILEGE_ALL,
272 PRIVILEGE_AUTH,
273 PRIVILEGE_SIGN,
274 PRIVILEGE_ENCRYPT,
275 PRIVILEGE_ELIDE,
276 PRIVILEGE_ISSUE,
277 PRIVILEGE_ACCESS,
278
279 PRIVILEGE_DELEGATE,
280 PRIVILEGE_VERIFY,
281 PRIVILEGE_UPDATE,
282 PRIVILEGE_TRANSFER,
283 PRIVILEGE_ELECT,
284 PRIVILEGE_BURN,
285 PRIVILEGE_REVOKE,
286
287 BODY,
288 RESULT,
289 ERROR,
290 OK_VALUE,
291 PROCESSING_VALUE,
292 SENDER,
293 SENDER_CONTINUATION,
294 RECIPIENT_CONTINUATION,
295 CONTENT,
296
297 SEED_TYPE,
298 PRIVATE_KEY_TYPE,
299 PUBLIC_KEY_TYPE,
300 MASTER_KEY_TYPE,
301
302 ASSET,
303 BITCOIN_VALUE,
304 ETHEREUM_VALUE,
305 TEZOS_VALUE,
306
307 NETWORK,
308 MAIN_NET_VALUE,
309 TEST_NET_VALUE,
310
311 BIP32_KEY_TYPE,
312 CHAIN_CODE,
313 DERIVATION_PATH_TYPE,
314 PARENT_PATH,
315 CHILDREN_PATH,
316 PARENT_FINGERPRINT,
317 PSBT_TYPE,
318 OUTPUT_DESCRIPTOR_TYPE,
319 OUTPUT_DESCRIPTOR,
320
321 GRAPH,
322 SOURCE_TARGET_GRAPH,
323 PARENT_CHILD_GRAPH,
324 DIGRAPH,
325 ACYCLIC_GRAPH,
326 MULTIGRAPH,
327 PSEUDOGRAPH,
328 GRAPH_FRAGMENT,
329 DAG,
330 TREE,
331 FOREST,
332 COMPOUND_GRAPH,
333 HYPERGRAPH,
334 DIHYPERGRAPH,
335 NODE,
336 EDGE,
337 SOURCE,
338 TARGET,
339 PARENT,
340 CHILD,
341 ]);
342 *self.data.lock().unwrap() = Some(m);
343 });
344 self.data.lock().unwrap()
345 }
346}
347
348pub static KNOWN_VALUES: LazyKnownValues = LazyKnownValues {
370 init: Once::new(),
371 data: Mutex::new(None),
372};
373
374#[cfg(test)]
375mod tests {
376 #[test]
377 fn test_1() {
378 assert_eq!(crate::IS_A.value(), 1);
379 assert_eq!(crate::IS_A.name(), "isA");
380 let binding = crate::KNOWN_VALUES.get();
381 let known_values = binding.as_ref().unwrap();
382 assert_eq!(known_values.known_value_named("isA").unwrap().value(), 1);
383 }
384}