recast-lang 0.1.0

A parser for the RapidRecast Definition Language
Documentation
use crate::ast::protocol::{HttpStatement, RapidProtocolDefinition, RapidRecastHttpMethod};
use crate::ast::RapidAstStatement::ProtocolDefinition;
use crate::ast::{RapidRecastDefinition, Version};
use crate::json::JsonRRDL;
use crate::ParseRRDL;
use std::borrow::Cow;

#[test]
pub fn bare_minimum() {
    let input = r#"
    {
        "id": "unique-schema-id-123",
        "language_version": "1.2.3",
        "file_version": "4.5.6",
        "ast": []
    }
    "#;

    let parser = JsonRRDL {};

    let res = parser.parse_rrdl(input).unwrap();
    assert_eq!(
        res,
        RapidRecastDefinition {
            id: Cow::Owned("unique-schema-id-123".to_string()),
            language_version: Version {
                major: 1,
                minor: 2,
                patch: 3,
            },
            file_version: Version {
                major: 4,
                minor: 5,
                patch: 6,
            },
            name: None,
            description: None,
            ast: vec![],
        }
    )
}

#[test]
pub fn protocol_definition() {
    let input = r#"
    {
        "id": "unique-schema-id-123",
        "language_version": "1.2.3",
        "file_version": "4.5.6",
        "ast": [
            {
                "ProtocolDefinition": {
                    "HttpProtocolDefinition": {
                        "sequence": 0,
                        "paths": ["/user"],
                        "methods": ["POST"],
                        "actions": []
                    }
                }
            }
        ]
    }
    "#;

    let parser = JsonRRDL {};

    let res = parser.parse_rrdl(input).unwrap();
    assert_eq!(
        res,
        RapidRecastDefinition {
            id: Cow::Owned("unique-schema-id-123".to_string()),
            language_version: Version {
                major: 1,
                minor: 2,
                patch: 3,
            },
            file_version: Version {
                major: 4,
                minor: 5,
                patch: 6,
            },
            name: None,
            description: None,
            ast: vec![ProtocolDefinition(
                RapidProtocolDefinition::HttpProtocolDefinition(HttpStatement {
                    sequence: 0,
                    paths: vec![Cow::Borrowed("/user")],
                    methods: vec![RapidRecastHttpMethod::POST],
                    actions: vec![],
                })
            ),],
        }
    );
}