glossa_codegen/
visibility.rs1#[derive(Debug, Clone)]
2pub enum Visibility {
3 Private,
4 PubCrate,
5 Pub,
6 PubSuper,
7 }
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}