1use crate::types::Effect;
11use std::collections::HashMap;
12use std::sync::LazyLock;
13
14mod adt;
15mod arith;
16mod callable;
17mod concurrency;
18mod diagnostics;
19mod float;
20mod fs;
21mod io;
22mod list;
23mod macros;
24mod map;
25mod os;
26mod stack;
27mod tcp;
28mod text;
29mod udp;
30
31#[cfg(test)]
32mod tests;
33
34pub fn builtin_signature(name: &str) -> Option<Effect> {
36 BUILTIN_SIGNATURES.get(name).cloned()
37}
38
39pub fn builtin_signatures() -> HashMap<String, Effect> {
44 BUILTIN_SIGNATURES.clone()
45}
46
47static BUILTIN_SIGNATURES: LazyLock<HashMap<String, Effect>> = LazyLock::new(|| {
48 let mut sigs = HashMap::new();
49 io::add_signatures(&mut sigs);
50 fs::add_signatures(&mut sigs);
51 arith::add_signatures(&mut sigs);
52 stack::add_signatures(&mut sigs);
53 concurrency::add_signatures(&mut sigs);
54 callable::add_signatures(&mut sigs);
55 tcp::add_signatures(&mut sigs);
56 udp::add_signatures(&mut sigs);
57 os::add_signatures(&mut sigs);
58 text::add_signatures(&mut sigs);
59 adt::add_signatures(&mut sigs);
60 list::add_signatures(&mut sigs);
61 map::add_signatures(&mut sigs);
62 float::add_signatures(&mut sigs);
63 diagnostics::add_signatures(&mut sigs);
64 sigs
65});
66
67pub fn builtin_doc(name: &str) -> Option<&'static str> {
69 BUILTIN_DOCS.get(name).copied()
70}
71
72pub fn builtin_docs() -> &'static HashMap<&'static str, &'static str> {
74 &BUILTIN_DOCS
75}
76
77static BUILTIN_DOCS: LazyLock<HashMap<&'static str, &'static str>> = LazyLock::new(|| {
78 let mut docs = HashMap::new();
79 io::add_docs(&mut docs);
80 fs::add_docs(&mut docs);
81 arith::add_docs(&mut docs);
82 stack::add_docs(&mut docs);
83 concurrency::add_docs(&mut docs);
84 callable::add_docs(&mut docs);
85 tcp::add_docs(&mut docs);
86 udp::add_docs(&mut docs);
87 os::add_docs(&mut docs);
88 text::add_docs(&mut docs);
89 adt::add_docs(&mut docs);
90 list::add_docs(&mut docs);
91 map::add_docs(&mut docs);
92 float::add_docs(&mut docs);
93 diagnostics::add_docs(&mut docs);
94 docs
95});