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
use super::*; #[derive(Debug, Clone)] pub struct DecoratorSpec { pub name: Name, pub arguments: Vec<Statement>, } impl DecoratorSpec { pub fn new<N>(name: N) -> DecoratorSpec where N: Into<Name>, { DecoratorSpec { name: name.into(), arguments: Vec::new(), } } pub fn push_argument<S>(&mut self, statement: S) where S: Into<Statement>, { self.arguments.push(statement.into()); } } impl<'a, T> From<&'a T> for DecoratorSpec where T: Into<DecoratorSpec> + Clone, { fn from(value: &'a T) -> DecoratorSpec { value.clone().into() } } impl From<BuiltInName> for DecoratorSpec { fn from(value: BuiltInName) -> DecoratorSpec { DecoratorSpec::new(value) } } impl From<ImportedName> for DecoratorSpec { fn from(value: ImportedName) -> DecoratorSpec { DecoratorSpec::new(value) } } impl From<DecoratorSpec> for Element { fn from(value: DecoratorSpec) -> Element { let mut decl = Statement::new(); decl.push("@"); decl.push(value.name); decl.into() } }