glossa_codegen/
visibility.rs

1#[derive(Debug, Clone)]
2pub enum Visibility {
3  Private,
4  PubCrate,
5  Pub,
6  PubSuper,
7  // Custom(MiniStr),
8}
9
10impl core::fmt::Display for Visibility {
11  fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> std::fmt::Result {
12    let s = self.as_str();
13    let space = match s {
14      "" => "",
15      _ => " ",
16    };
17    write!(f, "{s}{space}",)
18  }
19}
20
21impl From<&str> for Visibility {
22  fn from(value: &str) -> Self {
23    use Visibility::*;
24    match value {
25      "" | "private" => Private,
26      "pub" => Pub,
27      "pub(super)" => PubSuper,
28      "pub(crate)" => PubCrate,
29      _ => PubCrate,
30    }
31  }
32}
33
34impl Visibility {
35  pub const fn as_str(&self) -> &str {
36    use Visibility::*;
37    match self {
38      Private => "",
39      PubCrate => "pub(crate)",
40      Pub => "pub",
41      PubSuper => "pub(super)",
42    }
43  }
44}
45
46impl AsRef<str> for Visibility {
47  fn as_ref(&self) -> &str {
48    self.as_str()
49  }
50}
51
52impl Default for Visibility {
53  fn default() -> Self {
54    Self::PubCrate
55  }
56}