use std::fmt::{self, Display, Formatter}; use serde::{Deserialize, Serialize}; use crate::{Block, Identifier, Type}; #[derive(Debug, Clone, Serialize, Deserialize, Eq, PartialEq, PartialOrd, Ord)] pub struct Function { parameters: Option>, body: Box, } impl Function { pub fn new(parameters: Option>, body: Block) -> Self { Function { parameters, body: Box::new(body), } } pub fn identifiers(&self) -> &Option> { &self.parameters } pub fn body(&self) -> &Block { &self.body } } impl Display for Function { fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result { write!( f, "function < {:?} > {{ {:?} }}", // TODO: Correct this output self.parameters, self.body ) } }