1use crate::tree::IDMap;
2use rustdoc_types::{ItemEnum, Visibility};
3use std::fmt::Write;
4
5mod fn_;
6mod struct_;
7
8fn vis(v: &Visibility, buf: &mut String) {
9 match v {
10 Visibility::Public => buf.push_str("pub "),
11 Visibility::Default => (),
12 Visibility::Crate => buf.push_str("pub(crate) "),
13 Visibility::Restricted { path, .. } => _ = write!(buf, "pub({path}) "),
14 };
15}
16
17fn buf(v: &Visibility) -> String {
18 let mut buf = String::with_capacity(128);
19 vis(v, &mut buf);
20 buf
21}
22
23trait Format {
25 fn parse(&self, v: &Visibility, fname: &str, map: &IDMap) -> String;
26}
27
28pub fn item_str(id: &str, map: &IDMap) -> String {
32 if let Some(item) = map.get_item(id) {
33 let fname = item.name.as_deref().unwrap_or("");
34 let vis = &item.visibility;
35 return match &item.inner {
36 ItemEnum::Import(reexport) => reexport
37 .id
38 .as_ref()
39 .map(|id| item_str(&id.0, map))
40 .unwrap_or_default(),
41 ItemEnum::Function(f) => f.parse(vis, fname, map),
42 ItemEnum::Struct(s) => s.parse(vis, fname, map),
43 _ => String::new(),
44 };
45 }
46 String::new()
47}