yozuk_core_skillset/
lib.rs

1#![forbid(unsafe_code)]
2#![deny(clippy::all)]
3
4use yozuk_sdk::prelude::*;
5
6const MODEL_ROOT_ID: &[u8] = b"2isUeklnTTne~VajLCPO6";
7
8#[macro_export]
9macro_rules! skills {
10    ( $([ $x:ident, $y:literal ],)* ) => {
11        $(
12            #[cfg(feature = $y)]
13            mod $x;
14        )*
15
16        pub const SKILLS: &[NamedSkillEntry] = &[
17            $(
18                #[cfg(feature = $y)]
19                NamedSkillEntry {
20                    key: $y,
21                    entry: $x::ENTRY
22                },
23            )*
24        ];
25
26        pub const fn skills_digest() -> [u8; 20] {
27            use const_sha1::ConstBuffer;
28            let sha_sum = ConstBuffer::from_slice(MODEL_ROOT_ID);
29            $(
30                let sha = ConstBuffer::new();
31                #[cfg(feature = $y)]
32                let sha = sha.push_slice($x::ENTRY.model_id);
33                let sha = sha.push_slice(&const_sha1::sha1(&sha_sum).bytes());
34                let sha_sum = ConstBuffer::from_slice(&const_sha1::sha1(&sha).bytes());
35            )*
36            const_sha1::sha1(&sha_sum).bytes()
37        }
38    };
39}
40
41skills!(
42    [base64, "yozuk-skill-base64"],
43    [calc, "yozuk-skill-calc"],
44    [dice, "yozuk-skill-dice"],
45    [digest, "yozuk-skill-digest"],
46    [lipsum, "yozuk-skill-lipsum"],
47    [nanoid, "yozuk-skill-nanoid"],
48    [numeric, "yozuk-skill-numeric"],
49    [chitchat, "yozuk-skill-chitchat"],
50    [punycode, "yozuk-skill-punycode"],
51    [uuid, "yozuk-skill-uuid"],
52    [version, "yozuk-skill-version"],
53    [color, "yozuk-skill-color"],
54    [unit, "yozuk-skill-unit"],
55    [geo, "yozuk-skill-geo"],
56    [password, "yozuk-skill-password"],
57    [urlencode, "yozuk-skill-urlencode"],
58    [bech32, "yozuk-skill-bech32"],
59    [prime, "yozuk-skill-prime"],
60    [jwt, "yozuk-skill-jwt"],
61    [blurhash, "yozuk-skill-blurhash"],
62    [qrcode, "yozuk-skill-qrcode"],
63    [consts, "yozuk-skill-consts"],
64    [time, "yozuk-skill-time"],
65    [ip, "yozuk-skill-ip"],
66    [msgpack, "yozuk-skill-msgpack"],
67    [unicode, "yozuk-skill-unicode"],
68    [hex, "yozuk-skill-hex"],
69    [kdf, "yozuk-skill-kdf"],
70    [compression, "yozuk-skill-compression"],
71    [username, "yozuk-skill-username"],
72);