diff --git a/src/abstract_tree/type.rs b/src/abstract_tree/type.rs index d3f480c..93241b0 100644 --- a/src/abstract_tree/type.rs +++ b/src/abstract_tree/type.rs @@ -22,6 +22,7 @@ pub enum Type { ListOf(Box), ListExact(Vec), Map, + Named(Identifier), None, Range, String, @@ -140,6 +141,7 @@ impl Display for Type { write!(f, ") : {return_type}") } Type::Structure { .. } => todo!(), + Type::Named(name) => write!(f, "{name}"), } } } diff --git a/src/parser.rs b/src/parser.rs index 3a3330d..d0a8be7 100644 --- a/src/parser.rs +++ b/src/parser.rs @@ -101,6 +101,7 @@ pub fn parser<'src>() -> impl Parser< just(Token::Keyword("range")).to(Type::Range), just(Token::Keyword("str")).to(Type::String), just(Token::Keyword("list")).to(Type::List), + identifier.clone().map(|name| Type::Named(name)), )) }) .map_with(|r#type, state| r#type.with_position(state.span())); diff --git a/tests/structs.rs b/tests/structs.rs index 47e0ba8..67a6c1f 100644 --- a/tests/structs.rs +++ b/tests/structs.rs @@ -39,7 +39,7 @@ fn nested_structure() { } Foo { - bar = Baz { + bar = Bar { baz = 42 } } @@ -47,10 +47,13 @@ fn nested_structure() { ), Ok(Some(Value::structure( Identifier::new("Foo"), - vec![ - (Identifier::new("bar"), Value::integer(42)), - (Identifier::new("baz"), Value::string("hiya".to_string())), - ] + vec![( + Identifier::new("bar"), + Value::structure( + Identifier::new("Bar"), + vec![(Identifier::new("baz"), Value::integer(42))] + ) + ),] ))) ) }