codeviz_python/
decorator_spec.rs

1use super::*;
2
3#[derive(Debug, Clone)]
4pub struct DecoratorSpec {
5    pub name: Name,
6    pub arguments: Vec<Statement>,
7}
8
9impl DecoratorSpec {
10    pub fn new<N>(name: N) -> DecoratorSpec
11    where
12        N: Into<Name>,
13    {
14        DecoratorSpec {
15            name: name.into(),
16            arguments: Vec::new(),
17        }
18    }
19
20    pub fn push_argument<S>(&mut self, statement: S)
21    where
22        S: Into<Statement>,
23    {
24        self.arguments.push(statement.into());
25    }
26}
27
28impl<'a, T> From<&'a T> for DecoratorSpec
29where
30    T: Into<DecoratorSpec> + Clone,
31{
32    fn from(value: &'a T) -> DecoratorSpec {
33        value.clone().into()
34    }
35}
36
37impl From<BuiltInName> for DecoratorSpec {
38    fn from(value: BuiltInName) -> DecoratorSpec {
39        DecoratorSpec::new(value)
40    }
41}
42
43impl From<ImportedName> for DecoratorSpec {
44    fn from(value: ImportedName) -> DecoratorSpec {
45        DecoratorSpec::new(value)
46    }
47}
48
49impl From<DecoratorSpec> for Element {
50    fn from(value: DecoratorSpec) -> Element {
51        let mut decl = Statement::new();
52
53        decl.push("@");
54        decl.push(value.name);
55
56        decl.into()
57    }
58}