5 releases
new 0.1.8 | Dec 5, 2024 |
---|---|
0.1.7 | Nov 22, 2024 |
0.1.6 | Oct 19, 2024 |
0.1.5 | Oct 3, 2024 |
0.1.3 | Aug 2, 2024 |
#353 in Procedural macros
543 downloads per month
Used in 4 crates
(3 directly)
62KB
1.5K
SLoC
Helper module for the fieldx
crate and for any 3rd party crates, extending fieldx
functionality.
fieldx
itself is heavily based on darling
crate which simplifies development of proc-macros quite a lot. But
it also imposes some constrains on attribute arguments syntax. This crate aims at overcoming these limitations and
providing support for some kinds of attributes required to implement fieldx
.
Here is a little break down of what is provided:
- support for nested arguments, i.e. those that look like
param1("value", trigger, subarg(...))
- support for some syntax elements that are not on the
darling
crate menu:some_type(crate::types::Foo)
,error(crate::error::Error, crate::error::Error::SomeProblem("with details"))
[^tuple] - a set of types implementing standard
fieldx
arguments like helpers, or literal values, etc.
[^tuple]: Here Error
is an enum, SomeProblem
is a variant.
Usage
Let's say we're implementing a field-level attribute foo
using darling::FromField
trait. And we want it to
take these arguments:
trigger
which would let turn some functionality on or offaction
to specify a method with special meaningcomment
with some textpublic
to specify if field-related code must be public and if yes then what kind ofpub
we need
A field declaration may take the following form with the attribute:
#[foo(
trigger,
action("method_name", private),
comment("Whatever we consider useful."),
public(crate)
)]
bar: usize,
For this we'd need the following declaration somewhere in our proc-macro implementation:
#derive(FromField)
#[darling(attributes(foo))]
struct FooField {
// ... skipping some darling-default fields ...
trigger: Option<FXBool>,
action: Option<FXHelper>,
comment: Option<FXString>,
public: Option<FXNestingAttr<FXPubMode>>,
}
That's all, this crate will take the burden of implementing the arguments from you!
Dependencies
~0.6–1MB
~24K SLoC