Introduction

The Atelier project is a suite of Rust crates that provides the ability to read, write, and process AWS Smithy interface definition models. AWS is using Smithy extensively to define their services and to generate client and server implementations.

$version: "1.0"

namespace example.motd

@documentation("Provides a Message of the day.")
service MessageOfTheDay {
   version: "2020-06-21"
   resources: [
      Message
   ]
}

resource Message {
   identifiers: {
      date: Date
   }
   read: GetMessage
}

@readonly
operation GetMessage {
   input: GetMessageInput
   output: GetMessageInput
}

@pattern("^\\d\\d\\d\\d\\-\\d\\d\\-\\d\\d$")
string Date

structure GetMessageInput {
   date: example.motd#Date
}

structure GetMessageOutput {
   @required
   message: String
}

The goal of the Atelier project is to provide both Rust-native crates that allow parsing and emitting of Smithy models but also a clean-slate implementation of the Smithy specifications. This aspect has been useful, addressing ambiguities in the published documentation.

After a more detailed description of Smithy itself, and a tour of the Atelier crates this book will cover the following topics:

  • How to programmatically create and manipulate in-memory models.
  • How to read and write Smithy model files, including assembling in-memory models from multiple source files.
  • How to use the lint and validate framework to check models.
  • How to run the cargo-atelier tool to perform many of these actions from the command-line.
  • How to extend the Atelier provided tools.