Keyword auto-imported

attrs

Source: compiler/src/builtin_docs/keywords.md

Lists the field and variant attributes a derive macro owns: derive Name(TypeDecl t) -> Code attrs(names) { … }.

An attribute such as #[names(rename = "…")] on a field is accepted only when a derive on the type owns it. Contextual: only a keyword in a derive header.

use macro::{TypeDecl, Code, lit};

derive FieldNames(TypeDecl t) -> Code attrs(names) {
    let names: Vec<Code> = Vec::new();
    for f in t.fields() {
        names.push(lit(f.attr_str("names", "rename", f.name.str())));
    }
    return quote items {
        impl ${t.name} {
            pub static fn field_names() -> Vec<string> {
                let out: Vec<string> = Vec::from([$(names),*]);
                return out;
            }
        }
    };
}

See also#

  • fn: Declares a function, a method, or (written in an expression) an anonymous function.
  • let: Declares a mutable local variable.
  • const: Declares a binding that cannot be reassigned: a local, a module constant, or a class field that is set only by new.
  • static: Declares a module-level or class-level slot shared by the whole program, or a method without self.
  • readonly: A read-only view of a value: nothing reachable through it can be changed.
  • if: Runs a block when a bool condition is true.
  • else: Introduces the branch of an if that runs when its condition is false (or its pattern does not match).
  • while: Repeats a block while a bool condition is true.
↑ ↓ navigate ↵ open