pythonic/
statement.rs

1use std::fmt::{Display, Formatter, Result};
2
3use {Argument, Assignment, Class, Comment, Function, FunctionCall, KeywordArgument};
4
5#[derive(Debug, Clone)]
6pub enum Statement {
7    Argument(Argument),
8    Assignment(Assignment),
9    Class(Class),
10    Comment(Comment),
11    Function(Function),
12    FunctionCall(FunctionCall),
13    KeywordArgument(KeywordArgument),
14}
15
16impl Display for Statement {
17    fn fmt(&self, f: &mut Formatter) -> Result {
18        let s: String = match self {
19            &Statement::Argument(ref s) => format!("{}", s),
20            &Statement::Assignment(ref s) => format!("{}", s),
21            &Statement::Comment(ref s) => format!("{}", s),
22            &Statement::Class(ref s) => format!("{}", s),
23            &Statement::FunctionCall(ref s) => format!("{}", s),
24            &Statement::Function(ref s) => format!("{}", s),
25            &Statement::KeywordArgument(ref s) => format!("{}", s),
26        };
27        write!(f, "{}", s)
28    }
29}
30
31impl Statement {
32    pub fn variable<T: Display>(name: T) -> Statement {
33        Statement::Argument(Argument::variable(name))
34    }
35
36    pub fn unnamed_variable<T: Display>(value: T) -> Statement {
37        Statement::Argument(Argument::Unnamed(value.to_string()))
38    }
39
40    pub fn function_call<T: Display>(name: T, arguments: Vec<Statement>) -> Statement {
41        Statement::FunctionCall(FunctionCall {
42            name: name.to_string(),
43            arguments: arguments,
44        })
45    }
46}