28 个版本

0.2.22 2021 年 7 月 2 日
0.2.20 2021 年 6 月 25 日
0.2.2 2021 年 2 月 16 日
0.2.1 2020 年 10 月 28 日
0.2.0 2020 年 7 月 28 日

#2 in #idl

Download history 432/week @ 2024-04-20 624/week @ 2024-04-27 746/week @ 2024-05-04 636/week @ 2024-05-11 602/week @ 2024-05-18 733/week @ 2024-05-25 986/week @ 2024-06-01 1453/week @ 2024-06-08 678/week @ 2024-06-15 1196/week @ 2024-06-22 599/week @ 2024-06-29 1060/week @ 2024-07-06 1207/week @ 2024-07-13 1670/week @ 2024-07-20 1722/week @ 2024-07-27 1154/week @ 2024-08-03

6,115 个月下载量
47 个 crate (11 直接)中使用

MIT 许可证

385KB
7K SLoC

Atelier: crate atelier_core

此 crate 为 AWS Smithy 接口定义语言提供 Rust 原生核心模型。

crates.io docs.rs

此 crate 是 Atelier crate 套件的基础,并提供以下组件

  1. 代表 Smithy 模型的模型结构本身。这是所有 Atelier crate 和工具共享的内存表示。
  2. 允许流畅且易于构建核心模型的模型构建器结构。
  3. 包含在 Smithy 规范中定义的形状集合的预览模型。
  4. 用于以不同表示形式读取/写入模型的特质。
    1. 一个模型编写器,输出稳定的行格式,有助于捕获测试结果。
    2. 使用 Rust 的 Debug 特质的模型编写器。
  5. 所有 Atelier crate 使用的公共 error 模块。

示例

以下示例演示了使用构建器接口创建简单服务的模型。该服务 MessageOfTheDay 有一个名为 Message 的资源。该资源有一个日期标识符,但 read 操作不要求日期成员,因此将返回当前日期的消息。

示例 - 构建器

use atelier_core::builder::traits::ErrorSource;
use atelier_core::model::builder::values::{ArrayBuilder, ObjectBuilder};
use atelier_core::model::builder::{
    Builder, ListBuilder, MemberBuilder, ModelBuilder, OperationBuilder, ResourceBuilder,
    ServiceBuilder, ShapeTraits, SimpleShapeBuilder, StructureBuilder, TraitBuilder,
};
use atelier_core::model::{Identifier, Model, ShapeID};

fn make_model() -> Model {
    ModelBuilder::new(Version::V10, "example.motd")
        .service(
            ServiceBuilder::new("MessageOfTheDay", "2020-06-21")
                .documentation("Provides a Message of the day.")
                .resource("Message")
                .into(),
        )
        .resource(
            ResourceBuilder::new("Message")
                .identifier("date", "Date")
                .read("GetMessage")
                .into(),
        )
        .simple_shape(
            SimpleShapeBuilder::string("Date")
                .apply_trait(traits::pattern(r"^\d\d\d\d\-\d\d-\d\d$"))
                .into(),
        )
        .operation(
            OperationBuilder::new("GetMessage")
                .readonly()
                .input("GetMessageInput")
                .output("GetMessageOutput")
                .error("BadDateValue")
                .into(),
        )
        .structure(
            StructureBuilder::new("GetMessageInput")
                .member("date", "Date")
                .into(),
        )
        .structure(
            StructureBuilder::new("GetMessageOutput")
                .add_member(MemberBuilder::string("message").required().into())
                .into(),
        )
        .structure(
            StructureBuilder::new("BadDateValue")
                .error_source(ErrorSource::Client)
                .add_member(MemberBuilder::string("errorMessage").required().into())
                .into(),
        )
        .into()
}

可运行示例

weather_builder.rs 示例在 examples 目录中使用了 Smithy 快速入门指南中的完整示例。 examples 目录还包括一对独立示例,使用语义模型和构建器 API,演示了上述示例中的 每日消息 服务。

通常可以通过以下方式使用 cargo 运行这些示例。

$ cargo run --example weather_builder
$ cargo run --example motd_core
$ cargo run --example motd_builder

更改

版本 0.2.22

  • 修复 [错误 #31](模型构建器忽略操作输出成员,错误地将输入成员存储在输出成员字段中)。

版本 0.2.21

  • 修改了 HasIdentity 特质,以便参数化标识符类型。
    • 为 HasIdentity 添加了 is() 方法。
  • 为 MemberShape 实现了 HasIdentity。
  • 删除了不必要的 Shape 特质。
  • 更新了 action::Transformer 的 API,不再消耗源。
  • 一些文档清理。

版本 0.2.20

版本 0.2.19

  • 将 MemberShape 上的 ID 从 ShapeID 改为 Identifier。这符合 Smithy IDL 的正式 BNF 和 JSON AST 使用的格式。

版本 0.2.18

  • 修复了行写入器的转义错误,这使得跨平台比较变得痛苦。

版本 0.2.17

  • 修复了 add_shape 错误,它必须允许在形状种类未解决的情况下具有 member_id 的形状。

版本 0.2.16

  • 修复了 fall-through 的情况下的解析器错误,并创建了一个未解决的引用。

版本 0.2.14

  • 重新组织了错误,使命名和消息保持一致,并删除了未使用的。

版本 0.2.14

  • 使 Identifier 和 ShapeID 实现 PartialOrd + Ord。
  • 添加了缺少的预定义 trait 标识符。

版本 0.2.13

  • 添加了“重命名”集合,以在抽象模型和相应的构建器中对服务形状进行操作。
  • 更新了 LineOrientedWriter,增加了空数组和对象的规则。
  • 在库顶部使所有语法值都公开。
  • 所有注解特质都使用空对象作为值,而不是 None。

版本 0.2.12

  • 修改了“apply”特质到现有形状、引用和成员的构建器逻辑。

版本 0.2.11

  • 所有模型构建器现在使用 TryFrom 而不是 From 来报告错误,而不是 panic。
  • 实现了完整的 Smithy 无限定名称解析,并添加了来自核心文档的测试。
  • 使用新的共享 atelier-test crate。

版本 0.2.10

  • 添加了新的 io::lines 模块,其中包含 LineOrientedWriter。

版本 0.2.9

  • 修复了 Model::add_shape 中未解决形状的错误。

版本 0.2.8

  • 添加了合并元数据、形状和特质的测试用例。
  • 修复了元数据合并中的递归错误。

版本 0.2.7

  • 重构了 Model::add_metadata 方法,以执行 Smithy 所需的合并/冲突检查。
  • 重构了 Model::add_shape 方法,以执行 Smithy 所需的形状合并/冲突检查。
  • 重构了 HasTraits::apply_with_value 方法,以执行 Smithy 所需的特质合并/冲突检查。
    • 重构了特质的运用方式,现在它们是 HashMap 而不是 Vec,因为 Smithy 只允许应用一次相同的特质。
  • 实现了 Model::merge 方法。

版本 0.2.6

  • 重构了预定义模块,将懒静态移到使用它们的构建器中。
  • 使用宏为 TopLevelShape 和 MemberShip 实现了 HasTraits 的公共实现。
  • 更改 Resource::identifiers 以更具体地指定类型。

版本 0.2.5

  • 添加了公共 shape_selector! 宏。
  • PartialEq 添加到所有模型类型,以启用更多测试。
  • 整理了构建器接口并添加了一些更多的特质函数。
  • ExpressionListBuilder 重命名为 SelectorBuilder

版本 0.2.3

  • 添加了构建 Selector 模型的初始构建器类型。
  • ShapeType::All 重命名为 ShapeType::Any

版本 0.2.3

  • 添加了对构建 Selector 模型的支持。

版本 0.2.2

  • 重构:添加了 HasIdentityHasTraits 特质,以允许文档编写器具有多态性。
  • 添加:在特质构建器中使用预定义常量。

版本 0.2.1

  • 添加了 MutableModelVisitor 特质。

版本 0.2.0

  • 在 Smithy 团队就语义模型与 Smithy 团队的分离达成一致后,进行了主要重构。
    • 仅包含语义模型元素
    • 重构了特性模块
    • 将所有形状ID设置为绝对值
  • Builder API创建并验证形状ID。
  • 将UML编写器移动到库中。

版本0.1.5

  • 添加了UnwelcomeTerms代码检查器。
  • ModelReaderModelWriter的API更改;
    • 移除了representation方法
  • ActionIssue改为std::error::Error
  • ModelVisitor添加到action模块。
  • 添加了Model::merge方法。

版本0.1.4

  • 完成了NoOrphanedReferences验证器。
  • 添加了CorrectTypeReferences验证器。
  • 添加了NamingConventions代码检查器。
  • 添加了函数run_linter_actionsrun_validation_actions,并移除了ValidateAll类型。
  • 使用正则表达式进行身份解析。
  • REPRESENTATION移动到representation(),在ModelReaderModelWriter特质中。

版本0.1.3

  • 实现了调试和uml Writer实现的功能。
  • 为所有字符串常量添加了模块syntax
  • 将所有定义的ShapeID添加到模块prelude中。
  • 实现了动作的基础,并开始进行验证。
  • 根据Smithy规范实现了Model::resolve_id

版本0.1.2

  • 更新模型和构建器API以支持JSON和Smithy读取器
    • 添加了HasMembers特质以实现更无类型的API,
  • 完成了API文档。

版本0.1.1

  • 更新模型和构建器API以提高一致性
    • 记录方法模式,并确保它们已应用,
    • 从每个类型的build方法移动到使用Into<T>
  • 添加了大多数API文档。

版本0.1.0

  • 首次发布。
  • 为操作Smithy模型初始化的类型,不包括选择器表达式。
  • 初始化用于流畅构建模型的构建器类型。
  • 能够使用构建器API构建示例天气服务。

TODO

  1. 完成前缀模型。
  2. 更多文档
  3. 更多测试

依赖关系

~5–7.5MB
~135K SLoC