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
6,115 个月下载量
在 47 个 crate (11 直接)中使用
385KB
7K SLoC
Atelier: crate atelier_core
此 crate 为 AWS Smithy 接口定义语言提供 Rust 原生核心模型。
此 crate 是 Atelier crate 套件的基础,并提供以下组件
- 代表 Smithy 模型的模型结构本身。这是所有 Atelier crate 和工具共享的内存表示。
- 允许流畅且易于构建核心模型的模型构建器结构。
- 包含在 Smithy 规范中定义的形状集合的预览模型。
- 用于以不同表示形式读取/写入模型的特质。
- 一个模型编写器,输出稳定的行格式,有助于捕获测试结果。
- 使用 Rust 的 Debug 特质的模型编写器。
- 所有 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
- 实现了使用模型组装器,使 cargo-atelier的lint和validate应该能在由多个命名空间文件构建的模型上工作。
- 将 Model::namespaces 更改为返回 HashSet 而不是 Vec。
版本 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
- 重构:添加了
HasIdentity
和HasTraits
特质,以允许文档编写器具有多态性。 - 添加:在特质构建器中使用预定义常量。
版本 0.2.1
- 添加了
MutableModelVisitor
特质。
版本 0.2.0
- 在 Smithy 团队就语义模型与 Smithy 团队的分离达成一致后,进行了主要重构。
- 仅包含语义模型元素
- 重构了特性模块
- 将所有形状ID设置为绝对值
- Builder API创建并验证形状ID。
- 将UML编写器移动到库中。
版本0.1.5
- 添加了
UnwelcomeTerms
代码检查器。 ModelReader
和ModelWriter
的API更改;- 移除了
representation
方法
- 移除了
- 将
ActionIssue
改为std::error::Error
。 - 将
ModelVisitor
添加到action
模块。 - 添加了
Model::merge
方法。
版本0.1.4
- 完成了
NoOrphanedReferences
验证器。 - 添加了
CorrectTypeReferences
验证器。 - 添加了
NamingConventions
代码检查器。 - 添加了函数
run_linter_actions
和run_validation_actions,并移除了
ValidateAll
类型。 - 使用正则表达式进行身份解析。
- 将
REPRESENTATION
移动到representation()
,在ModelReader
和ModelWriter
特质中。
版本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
- 完成前缀模型。
- 更多文档
- 更多测试
依赖关系
~5–7.5MB
~135K SLoC