atelier_smithy 0.2.13

Rust native Smithy language format for the AWS Smithy IDL.
Documentation
use atelier_core::model::Model;
use atelier_smithy::SmithyReader;
use atelier_test::{parse_and_compare_model, parts as model_part};

fn model_test(input_str: &str, expected: Model) {
    parse_and_compare_model(input_str, &mut SmithyReader::default(), expected);
}

#[test]
fn empty_file() {
    model_test("", Model::default())
}

#[test]
fn namespace_only() {
    model_test(
        "namespace smithy.waiters",
        model_part::namespace_only().model,
    )
}

#[test]
fn simple_shape_only() {
    model_test(
        r##"namespace smithy.waiters
        
        integer WaiterDelay"##,
        model_part::simple_shape_only().model,
    )
}

#[test]
fn simple_shape_with_block_text() {
    model_test(
        r##"namespace example.foo
        @documentation("""
            A wait time for "foo" to happen
        """)
        integer FooDelay"##,
        model_part::simple_shape_with_block_text().model,
    )
}

#[test]
fn simple_shape_with_block_text_2() {
    model_test(
        r##"namespace example.foo
        @documentation("""Do empty "" quotes work too?""")
        integer FooDelay"##,
        model_part::simple_shape_with_block_text_2().model,
    )
}

#[test]
fn simple_shape_with_traits() {
    model_test(
        r##"namespace smithy.waiters
        
        @box
        @range(min: 1)
        integer WaiterDelay"##,
        model_part::simple_shape_with_traits().model,
    )
}

#[test]
fn simple_shape_with_traits_and_comments() {
    model_test(
        r##"// start of the file
        namespace smithy.waiters // this namespace is added to all shape names
        
        @box // it's a boxed, not atomic, value
        @range(min: 1) // set the minimum value
        integer WaiterDelay"##,
        model_part::simple_shape_with_traits_and_comments().model,
    )
}

#[test]
fn simple_shape_with_traits_and_documentation() {
    model_test(
        r##"namespace smithy.waiters
        
        /// The name, or identifier, of a waiter.
        @pattern("^[A-Z]+[A-Za-z0-9]*$")
        string WaiterName"##,
        model_part::simple_shape_with_traits_and_documentation().model,
    )
}