smithy-cargo
Tooling for building Smithy models from cargo build scripts (build.rs).
This crate does not build models itself; it calls out to the Smithy CLI, expecting it to be installed on the current machine.
Getting Started
[!IMPORTANT]
Before you proceed, make sure you have the Smithy CLI installed.
First, create a new cargo project and add smithy-cargo as a build dependency
cargo new smithy-cargo-example \
&& cd smithy-cargo-example \
&& cargo add --build smithy-cargo
Next, add a smithy-build config file to the
root of the project. This config file determines how Smithy will build your models.
Now, add any smithy models we want to build to a model/ directory within our cargo project.
smithy-cargo will automatically discover any smithy files within the model/ directory
and include them as sources for the Smithy build.
Finally, configure smithy-cargo to run as part of your cargo build script (build.rs):
use SmithyBuild;
Your fully configured cargo project should now look something like:
.
├── Cargo.toml
├── build.rs
├── model
│ └── a.smithy
├── smithy-build.json
└── src
└── main.rs
To run the Smithy build, just run cargo build as you would normally and the smithy build
will be executed by the build script.
Including generated Rust code
[!WARNING] This package does not provide any Smithy code generation plugins for rust on its own. You will still need to add a rust codegen plugin (such as smithy4rs) to actually generate rust code
Your Smithy build may use a build plugin to generate Rust code that you want to include as part of your crate.
For example the following smithy-build config:
Might generate a number of .rs files as build artifacts.
We can use the built-in include macro and the $SMITHY_OUTPUT_DIR
environment variable added by the smithy-cargo build tool to quickly add
generated files to our project:
// Module containing all of our generated Smithy shapes
License
This library is licensed under the Apache 2.0 License.