Skip to content

ModProg/attribute-derive

Folders and files

NameName
Last commit message
Last commit date

Latest commit

16cbc65 · Nov 17, 2024

History

74 Commits
Aug 27, 2024
Mar 17, 2024
Jul 30, 2024
Nov 17, 2024
Nov 2, 2024
Aug 6, 2024
Feb 12, 2022
Nov 17, 2024
Nov 17, 2024
Mar 17, 2024
Mar 17, 2024
Sep 17, 2023
Feb 4, 2023

Repository files navigation

attribute-derive

docs.rs lib.rs MIT Documentation for main

Basically clap for attribute macros:

use attribute_derive::Attribute;
use syn::Type;

#[derive(Attribute)]
#[attribute(ident = collection)]
#[attribute(error(missing_field = "`{field}` was not specified"))]
struct CollectionAttribute {
    // Options are optional by default (will be set to None if not specified)
    authority: Option<String>,
    name: String,
    // Any type implementing default can be flagged as default
    // This will be set to Vec::default() when not specified
    #[attribute(optional)]
    views: Vec<Type>,
    // Booleans can be used without assigning a value, i.e., as a flag.
    // If omitted they are set to false
    some_flag: bool,
}

Will be able to parse an attribute like this:

#[collection(authority="Some String", name = r#"Another string"#, views = [Option, ()])]

Limitations

There are some limitations in syntax parsing that will be lifted future releases.

  • literals in top level (meaning something like #[attr(42, 3.14, "hi")]
  • function like arguments (something like #[attr(view(a = "test"))]
  • other syntaxes, maybe something like key: value

Parse methods

There are multiple ways of parsing a struct deriving Attribute.

For helper attributes there is:

For parsing a single TokenStream e.g. for parsing the proc macro input there a two ways: