codeviz_python/
decorator_spec.rs1use 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}