20 releases
| 0.2.3 | Jul 30, 2025 |
|---|---|
| 0.2.1 | Jun 28, 2025 |
| 0.1.12 | Mar 21, 2025 |
| 0.1.8 | Dec 5, 2024 |
| 0.1.7 | Nov 22, 2024 |
#337 in Procedural macros
1,929 downloads per month
Used in 6 crates
(4 directly)
110KB
2.5K
SLoC
FieldX v0.2.3
Helper crate for fieldx and any third-party crates that extend its functionality. Can be used either to extend
FieldX functionality or to implement your own proc-macros.
fieldx is heavily based on the darling crate, which greatly simplifies proc-macro development,
but also imposes some constraints on attribute argument syntax. This crate overcomes these limitations
and provides support for attribute kinds required to implement fieldx.
Here is a brief breakdown of what is provided:
- Support for nested arguments, i.e. those that look like
arg1("value", trigger, subarg(...)). - Support for syntax elements not covered by the
darlingcrate, such assome_type(crate::types::Foo)anderror(crate::error::Error, crate::error::Error::SomeProblem("with details"))[^tuple]. - A set of types implementing standard
fieldxarguments like helpers or literal values.
[^tuple]: Here, the first argument of error()—Error—is an enum, and SomeProblem is one of its variants.
Usage
Imagine we are implementing a field-level attribute foo using the darling::FromField trait, and we want it to
accept the following arguments:
trigger: enables or disables certain functionalityaction: specifies a method with special meaningcomment: accepts arbitrary textvis: indicates whether field-related code should be public, and if so, which kind ofpubmodifier to use
A field declaration may take the following form with the attribute:
#[foo(
trigger,
action("method_name", private),
comment("Whatever we consider useful."),
vis(pub(crate))
)]
bar: usize,
For this, you’ll need the following declaration somewhere in your proc-macro implementation:
#derive(FromField)
#[darling(attributes(foo))]
struct FooField {
// ... skipping some darling default fields ...
trigger: Option<FXBool>,
action: Option<FXHelper>,
comment: Option<FXString>,
vis: Option<FXSynValue<syn::Visibility>>,
}
That’s all; this crate will take care of implementing the arguments for you!
Read the FieldX Object Manager book for the introduction on how to use this crate.
License
Licensed under the BSD 3-Clause License.
Dependencies
~0.6–1MB
~21K SLoC