1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
use std::collections::BTreeSet; use super::*; #[derive(Debug, PartialEq, Eq, PartialOrd, Ord, Clone, Hash)] pub enum Modifier { Default, Public, Protected, Private, Abstract, Static, Final, } #[derive(Debug, PartialEq, Eq, Clone)] pub struct Modifiers { pub modifiers: BTreeSet<Modifier>, } impl Modifiers { pub fn new() -> Modifiers { Modifiers { modifiers: BTreeSet::new() } } pub fn insert(&mut self, modifier: Modifier) { self.modifiers.insert(modifier); } pub fn format(&self) -> String { let mut out: Vec<String> = Vec::new(); for m in &self.modifiers { out.push(match *m { Modifier::Abstract => "abstract".to_owned(), Modifier::Default => "default".to_owned(), Modifier::Public => "public".to_owned(), Modifier::Protected => "protected".to_owned(), Modifier::Private => "private".to_owned(), Modifier::Static => "static".to_owned(), Modifier::Final => "final".to_owned(), }); } out.join(" ") } pub fn is_empty(&self) -> bool { self.modifiers.is_empty() } pub fn contains(&self, modifier: &Modifier) -> bool { self.modifiers.contains(modifier) } } impl From<Modifiers> for Variable { fn from(value: Modifiers) -> Variable { Variable::Literal(value.format()) } }