Expand description
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"))1. - A set of types implementing standard
fieldxarguments 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 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.
Here, the first argument of
error()—Error—is an enum, andSomeProblemis 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 (
getargument offxstruct/fieldxattributes). - 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
darlingbut implementsyn::parse::Parse - traits
- value
- Literal value arguments
- with_
origin - Trait for objects that know their origins.
Macros§
- ident_
or_ alias - join_
token_ list - set_
literals - Generate implementation of
set_literalsmethod forFromNestAttrtrait. - to_
tokens_ vec - validate_
exclusives - Generate
validate_exclusivesthat would return adarling::Resultif two arguments of an attribute are conflicting with each other. - validate_
no_ subarg_ at_ level - Generate code error out on sub-arguments that are invalid at a given level.
Structs§
Enums§
- FXSync
Mode Variant - Concurrency mode
Type Aliases§
- FXAccessor
- Accessor helper
- FXAttributes
- FXBool
- Boolean literal
- FXBuilder
- Builder helper
- FXDoc
docargument- FXHelper
- Standard helper
- FXSerde
serdeargument- 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: