libgir/codegen/
visibility.rs
1use std::{fmt, str::FromStr};
2
3#[derive(Default, Debug, Clone, Copy, Eq, PartialEq)]
4pub enum Visibility {
5 #[default]
6 Public,
7 Crate,
8 Super,
9 Private,
10}
11
12impl Visibility {
13 pub fn is_public(self) -> bool {
14 self == Self::Public
15 }
16
17 pub fn export_visibility(self) -> &'static str {
18 match self {
19 Self::Public => "pub",
20 Self::Private => "",
21 Self::Crate => "pub(crate)",
22 Self::Super => "pub(super)",
23 }
24 }
25}
26
27impl fmt::Display for Visibility {
28 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
29 f.write_str(self.export_visibility())
30 }
31}
32
33#[derive(Debug)]
34pub struct ParseVisibilityError(String);
35
36impl std::error::Error for ParseVisibilityError {}
37
38impl fmt::Display for ParseVisibilityError {
39 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
40 write!(f, "{}", self.0)
41 }
42}
43
44impl FromStr for Visibility {
45 type Err = ParseVisibilityError;
46
47 fn from_str(s: &str) -> Result<Self, Self::Err> {
48 match s {
49 "pub" => Ok(Self::Public),
50 "super" => Ok(Self::Super),
51 "private" => Ok(Self::Private),
52 "crate" => Ok(Self::Crate),
53 e => Err(ParseVisibilityError(format!("Wrong visibility type '{e}'"))),
54 }
55 }
56}