# Smithy Rust ![status](https://github.com/awslabs/smithy-rs/workflows/CI/badge.svg)
Smithy code generators for Rust

The nightly SDK build can be found under `Actions -> CI (take latest run) -> Artifacts`

[Design documentation (WIP)](https://awslabs.github.io/smithy-rs/)

**All internal and external interfaces are considered unstable and subject to change without notice.**

## Setup
1. `./gradlew` will setup gradle for you. JDK 11 is required.
2. Running tests requires a working Rust installation. See [Rust docs](https://www.rust-lang.org/learn/get-started) for
installation instructions on your platform. Minimum supported Rust version is the latest released Rust version, although older versions may work.

## Generate an AWS SDK
The generated SDK will be placed in `aws/sdk/build/aws-sdk`.
```
./gradlew :aws:sdk:assemble # Generate an SDK. Do not attempt to compile / run tests
./gradlew :aws:sdk:test # Run all the tests
./gradlew :aws:sdk:cargoCheck # only validate that it compiles
```
## Run tests
```./test.sh```

This will run all the unit tests, codegen example models & Dynamo DB, validate that the generated code compiles, and run any tests targeting the generated code.

## Development
For development, pre-commit hooks may be useful. Setup:
```
brew install pre-commit # (or appropriate for your platform: https://pre-commit.com/)
pre-commit install
```

### Project Layout
* `aws`: AWS specific codegen & Rust code (signing, endpoints, customizations, etc.)
  Common commands:
     * `./gradlew :aws:sdk:assemble`: Generate (but do not test / compile etc.) a fresh SDK into `sdk/build/aws-sdk`
     * `./gradlew :aws:sdk:test`: Generate & run all tests for a fresh SDK
     * `./gradlew :aws:sdk:{cargoCheck, cargoTest, cargoDocs, cargoClippy}`: Generate & run specified cargo command.
* `codegen`: Whitelabel Smithy client code generation
* `codegen-test`: Smithy protocol test generation & integration tests for Smithy client whitelabel code
* [`design`](design): Design documentation. See the [design/README.md](design/README.md) for details about building / viewing.
* `codegen-server`: Whitelabel Smithy server code generation
* `codegen-server-test`: Smithy protocol test generation & integration tests for Smithy server whitelabel code