What is a crate attribute and where do I add it?

RustRust Cargo

Rust 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 called main.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.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionSoham ChowdhuryView Question on Stackoverflow
Solution 1 - RustShepmasterView Answer on Stackoverflow