Commonly Used Attributes

In Rust, attributes provide metadata about the code to the compiler. Some commonly used attributes include:

#[derive(...)]: Automatically implements standard traits for a struct or enum.

#[derive(Debug, Clone, PartialEq)] struct Point { x: i32, y: i32, }

#[cfg(...)]: Compiles code conditionally based on specified configuration options.

#[cfg(test)] mod tests { #[test] fn it_works() { assert_eq!(2 + 2, 4); } }

#[test]: Marks a function as a test function to be run by the test harness.

#[test] fn test_addition() { assert_eq!(2 + 2, 4); }

#[allow(...)] and #[deny(...)]: Controls compiler warnings and errors.

#[allow(dead_code)] fn unused_function() { // This function is not used } #[deny(missing_docs)] fn another_function() { // This will cause a compilation error if there are no docs }

#[inline] and #[inline(always)]: Suggests to the compiler to inline the function.

#[inline] fn add(a: i32, b: i32) -> i32 { a + b } #[inline(always)] fn multiply(a: i32, b: i32) -> i32 { a * b }

#[macro_use]: Imports macros from an external crate.

#[macro_use] extern crate serde_derive; #[derive(Serialize, Deserialize)] struct MyStruct { field: String, }

#[non_exhaustive]: Prevents exhaustive matching on enums, making it easier to add variants in the future.

#[non_exhaustive] enum MyEnum { Variant1, Variant2, }

Don't worry if these things don't make sense; we will learn all these things in the coming weeks.