rustpython_doc/
lib.rs

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}