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}