1use once_cell::sync::Lazy;
2use std::collections::HashMap;
3
4pub type Result<'a> = std::result::Result<Option<&'a str>, ()>;
5
6pub struct Database<'a> {
7 inner: HashMap<&'a str, Option<&'a str>>,
8}
9
10impl<'a> Database<'a> {
11 pub fn shared() -> &'static Self {
12 static DATABASE: Lazy<Database> = Lazy::new(|| {
13 let data = include!("../docs.inc.rs");
14 let mut map = HashMap::with_capacity(data.len());
15 for (item, doc) in data {
16 map.insert(item, doc);
17 }
18 Database { inner: map }
19 });
20 &DATABASE
21 }
22
23 pub fn try_path(&self, path: &str) -> Result {
24 self.inner.get(path).copied().ok_or(())
25 }
26
27 pub fn try_module_item(&self, module: &str, item: &str) -> Result {
28 self.try_path(&format!("{}.{}", module, item))
29 }
30}
31
32#[cfg(test)]
33mod test {
34 use super::*;
35
36 #[test]
37 fn test_module_item() {
38 let doc = Database::shared()
39 .try_module_item("array", "_array_reconstructor")
40 .unwrap();
41 assert!(doc.is_some());
42 }
43}