xenon_codegen/
attribute.rs

1use core::fmt;
2use std::fmt::Formatter;
3
4/// An attribute applied to its owner
5#[derive(Debug, Clone, Default)]
6pub struct Attribute {
7    pub name: String,
8    pub value: Option<String>,
9}
10impl Attribute {
11    pub fn new(name: &str) -> Attribute {
12        Attribute {
13            name: name.to_string(),
14            value: None,
15        }
16    }
17
18    pub fn is_valid(&self) -> bool {
19        self.name.is_empty()
20    }
21}
22impl std::fmt::Display for Attribute {
23    fn fmt(&self, fmt: &mut Formatter<'_>) -> fmt::Result {
24        match write!(fmt, "#[{}", self.name) {
25            Ok(_) => (),
26            Err(e) => return Err(e),
27        }
28        if self.value.is_some() {
29            match write!(fmt, "({})", self.value.as_ref().unwrap()) {
30                Ok(_) => (),
31                Err(e) => return Err(e),
32            }
33        }
34        match writeln!(fmt, "]") {
35            Ok(_) => (),
36            Err(e) => return Err(e),
37        }
38        Ok(())
39    }
40}