What is a crate attribute and where do I add it?
RustRust CargoRust Problem Overview
In order to get a feel for how Rust works, I decided to look at a little terminal-based text editor called Iota. I cloned the repository and ran cargo build
only to be told:
> > > error: if let syntax is experimental > > help: add #![feature(if_let)] to the crate attributes to enable
Where am I supposed to add #![feature(if_let)]
to the crate attributes?
Rust Solutions
Solution 1 - Rust
A crate attribute is an attribute (#[...]
) that applies to the enclosing context (#![...]
). This attribute must be added to the top of your crate root, thus the context is the crate itself:
#![attribute_name]
#![attribute_name(arg1, ...)]
If you are creating
- a library — the crate root will be a file called
lib.rs
- an application — the crate root would be the primary
.rs
file you build. In many cases, this will be calledmain.rs
- an integration test - the crate root is each file in
tests/
- an example - the crate root is each file in
examples/
The Rust Programming Language and the Rust Reference talk a bit about attributes in general. The Unstable Book contains a list of feature flags and brief documentation on what they do.
There are many different crate attributes, but the feature
crate attribute (#![feature(feature1, feature2)]
) may only be used in a nightly version of the compiler. Unstable features are not allowed to be used in stable Rust versions.