A cargo command for using Smithy models as a part of a build process.
```bash
cargo atelier --help cargo-atelier 0.2.2 Tools for the Smithy IDL.
USAGE:
cargo-atelier [FLAGS]
FLAGS: -h, --help Prints help information -n, --no-color Turn off color in the output -V, --version Prints version information -v, --verbose The level of logging to perform; from off to trace
SUBCOMMANDS: convert Convert model from one representation to another document Create human-readable documentation from a model help Prints this message or the help of the given subcommand(s) lint Run standard linter rules on a model file validate Run standard validators on a model file ```
Both the lint and validate commands use a common mechanism for printing results and will by default print using a colorized output. As different linter and validation rules can be used the reported by row informs you which rule-set has determined the error.
The document command creates documentation from the model, relying on specific traits for text and the prelude traits for some semantic properties. It used the somedoc crate to do the formatting and so the output format specified in this tool can select any of the formats supported by somedoc.
For the following badly formatted Smithy file, in test-models/lint-test.smithy
.
```text namespace org.example.smithy
@ThisIsNotAGoodName structure thisIsMyStructure { lower: String, Upper: String, someJSONThing: someUnknownShape, OK: Boolean }
string someUnknownShape
@trait structure ThisIsNotAGoodName {} ```
The following issues will be output when the linter runs.
```bash
cargo atelier lint -i test-models/lint-test.smithy -r smithy
[info] Shape names should conform to UpperCamelCase, i.e. ThisIsMyStructure
Reported by NamingConventions on/for element thisIsMyStructure
.
[info] Trait names should conform to lowerCamelCase, i.e. thisIsNotAGoodName
Reported by NamingConventions on/for element ThisIsNotAGoodName
.
[info] Member names should conform to lowerCamelCase, i.e. ok
Reported by NamingConventions on/for element thisIsMyStructure$OK
.
[info] Member name 'OK' appears to contain a known acronym, consider renaming i.e. ok
Reported by NamingConventions on/for element thisIsMyStructure
.
[info] Member names should conform to lowerCamelCase, i.e. someJsonThing
Reported by NamingConventions on/for element thisIsMyStructure$someJSONThing
.
[info] Member name 'someJSONThing' appears to contain a known acronym, consider renaming i.e. Json
Reported by NamingConventions on/for element thisIsMyStructure
.
[info] Shape names should conform to UpperCamelCase, i.e. SomeUnknownShape
Reported by NamingConventions on/for element someUnknownShape
.
[info] Member names should conform to lowerCamelCase, i.e. upper
Reported by NamingConventions on/for element thisIsMyStructure$Upper
.
```
For the following erroneous Smithy file, in test-models/validation-test.smithy
.
```text namespace org.example.smithy
structure MyStructure { known: String, wrongType: SomeOperation, }
operation SomeOperation { input: SomeService }
service SomeService { version: "1.0", operations: [MyStructure] } ```
The following issues will be output when the validation runs.
```bash
cargo atelier validate -i test-models/validation-test.smithy -r smithy
[error] Structure member may not refer to a service, operation, resource or apply.
Reported by CorrectTypeReferences on/for element MyStructure$wrongType
.
[warning] Structure member's type (smithy.api#NotString) cannot be resolved to a shape in this model.
Reported by CorrectTypeReferences on/for element MyStructure$unknown
.
[error] Service operation must be an operation.
Reported by CorrectTypeReferences on/for element SomeService
.
[error] Operation input may not refer to a service, operation, resource or apply.
Reported by CorrectTypeReferences on/for element SomeOperation
.
```
```bash
cargo atelier document -i test-models/lint-test.smithy -w xwiki {{comment}} title: Smithy Model {{/comment}}
Smith Version: 1.0
= Namespace org.example.smithy =
(% id="shape:ThisIsNotAGoodName" %) == ThisIsNotAGoodName (structure) ==
|=Trait|=Value| |Is Trait|##true##|
(% id="shape:someUnknownShape" %) == someUnknownShape (string) ==
(% id="shape:thisIsMyStructure" %) == thisIsMyStructure (structure) ==
=== Members ===
Version 0.2.4
Version 0.2.3
Version 0.2.2
somedoc::write::OutputFormat
to select format.Version 0.2.1
HasIdentity
and HasTraits
.Version 0.1.3
Version 0.1.2
Version 0.1.1
Version 0.1.0