prax_schema/parser/
grammar.rs1use pest_derive::Parser;
4
5#[derive(Parser)]
7#[grammar = "parser/prax.pest"]
8pub struct PraxParser;
9
10#[cfg(test)]
11mod tests {
12 use super::*;
13 use pest::Parser;
14
15 #[test]
16 fn test_parse_identifier() {
17 let result = PraxParser::parse(Rule::identifier, "User");
18 assert!(result.is_ok());
19 }
20
21 #[test]
22 fn test_parse_field_type() {
23 let result = PraxParser::parse(Rule::field_type, "String?");
24 assert!(result.is_ok());
25
26 let result = PraxParser::parse(Rule::field_type, "Post[]");
27 assert!(result.is_ok());
28 }
29
30 #[test]
31 fn test_parse_attribute() {
32 let result = PraxParser::parse(Rule::field_attribute, "@id");
33 assert!(result.is_ok());
34
35 let result = PraxParser::parse(Rule::field_attribute, "@default(now())");
36 assert!(result.is_ok());
37
38 let result = PraxParser::parse(
39 Rule::field_attribute,
40 "@relation(fields: [author_id], references: [id])",
41 );
42 assert!(result.is_ok());
43 }
44
45 #[test]
46 fn test_parse_model() {
47 let input = r#"model User {
48 id Int @id @auto
49 email String @unique
50 }"#;
51 let result = PraxParser::parse(Rule::model_def, input);
52 assert!(result.is_ok(), "Failed to parse model: {:?}", result.err());
53 }
54
55 #[test]
56 fn test_parse_enum() {
57 let input = r#"enum Role {
58 User
59 Admin
60 }"#;
61 let result = PraxParser::parse(Rule::enum_def, input);
62 assert!(result.is_ok());
63 }
64}