Expand description
§fieldx_aux
Helper crate for fieldx
and any third-party crates that extend its functionality.
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
darling
crate, such assome_type(crate::types::Foo)
anderror(crate::error::Error, crate::error::Error::SomeProblem("with details"))
1. - A set of types implementing standard
fieldx
arguments like helpers or literal values.
§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 ofpub
modifier 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!
Here, the first argument of
error()
—Error
—is an enum, andSomeProblem
is one of its variants. ↩
Re-exports§
pub use crate::accessor_helper::FXAccessorHelper;
pub use crate::accessor_helper::FXAccessorMode;
pub use crate::attributes::FXAttribute;
pub use crate::base_helper::FXBaseHelper;
pub use crate::builder_helper::FXBuilderHelper;
pub use crate::default_arg::FXDefault;
pub use crate::doc_arg::FXDocArg;
pub use crate::fallible::FXFallible;
pub use crate::nesting_attr::FXNestingAttr;
pub use crate::nesting_attr::FromNestAttr;
pub use crate::serde_helper::FXSerdeHelper;
pub use crate::setter_helper::FXSetterHelper;
pub use crate::syn_value::FXPunctuated;
pub use crate::syn_value::FXSynTupleArg;
pub use crate::syn_value::FXSynValueArg;
pub use crate::value::FXValueArg;
pub use crate::with_origin::FXOrig;
pub use crate::property::*;
pub use crate::traits::*;
Modules§
- accessor_
helper - Implementation of accessor helper (
get
argument offxstruct
/fieldx
attributes). - attributes
attributes*
family of arguments.- base_
helper - The most basic helper declaration
- builder_
helper - Parameters of builder pattern and builder object.
- default_
arg - Default value.
- doc_arg
- fallible
- Argument that signals possibility of errors.
- nesting_
attr - Argument nesting support module.
- property
- serde_
helper - setter_
helper - syn_
value - Support for types that are not supported by
darling
but implementsyn::parse::Parse
- traits
- value
- Literal value arguments
- with_
origin - Trait for objects that know their origins.
Macros§
- ident_
or_ alias - set_
literals - Generate implementation of
set_literals
method forFromNestAttr
trait. - validate_
exclusives - Generate
validate_exclusives
that would return adarling::Result
if two arguments of an attribute are conflicting with each other. - validate_
no_ macro_ args - Generate function to produce errors on sub-arguments that won’t be used in certain context.
Enums§
- FXSync
Mode - Concurrency mode
Type Aliases§
- FXAccessor
- Accessor helper
- FXAttributes
- FXBool
- Boolean literal
- FXBuilder
- Builder helper
- FXDoc
doc
argument- FXHelper
- Standard helper
- FXSerde
serde
argument- FXSetter
- Setter helper
- FXString
- String literal
- FXSyn
Tuple - Standard tuple for types implementing
syn::parse::Parse
- FXSyn
Value - Standard type implementing
syn::parse::Parse
- FXValue
- Standard literal value
Attribute Macros§
- fxhelper
- This macro is used to generate helper structs. It adds the following fields to support related helper functionality: