Struct amplify_syn::ParametrizedAttr [−][src]
pub struct ParametrizedAttr { pub name: String, pub args: HashMap<String, ArgValue>, pub paths: Vec<Path>, pub string: Option<LitStr>, pub bytes: Option<LitByteStr>, pub chars: Vec<LitChar>, pub integers: Vec<LitInt>, pub floats: Vec<LitFloat>, pub bool: Option<LitBool>, }
Expand description
Representation for all allowed forms of #[attr(...)]
attribute.
If attribute has a multiple occurrences they are all assembled into a single
list. Repeated named arguments are not allowed and result in errors.
For situations like in #[attr("string literal")]
, ParametrizedAttr
will have a name
field set to attr
, literal
field set to
Lit::LitStr(LitStr("string literal"))
, args
will be an empty HashSet
and paths
will be represented by an empty vector.
Fields
name: String
Attribute name - attr
part of #[attr(...)]
args: HashMap<String, ArgValue>
All attribute arguments that have form of #[attr(ident = "literal")]
or #[attr(ident = TypeName)]
mapped to their name identifiers.
paths: Vec<Path>
All attribute arguments that are paths or identifiers without any
specific value, like #[attr(std::io::Error, crate, super::SomeType)]
.
NB: All named arguments without the value assigned are getting into this
field by default, even if they do not represent any known rust path or
type name, like #[attr(some_id, other)]
. However, with
ParametrizedAttr::check
and ParametrizedAttr::checked
those
values matching ones specified in [AttrReq::args
] with values set to
[ValueOccurrences::Default
] are moved into ParametrizedAttr::args
.
string: Option<LitStr>
Unnamed string literal found within attribute arguments.
If multiple string literals are present they are concatenated into a
single value, like it is done by the rust compiler for
#[doc = "..."]
attributes
bytes: Option<LitByteStr>
Unnamed byte string literal found within attribute arguments.
If multiple byte string literals are present they are concatenated into
a single value, like it is done by the rust compiler for
#[doc = "..."]
attributes
chars: Vec<LitChar>
Unnamed char literals found within attribute arguments
integers: Vec<LitInt>
Unnamed integer literals found within attribute arguments
floats: Vec<LitFloat>
Unnamed float literals found within attribute arguments
bool: Option<LitBool>
Unnamed bool literal found within attribute arguments.
If multiple bool literals are present this will generate an error.
Implementations
impl ParametrizedAttr
[src]
impl ParametrizedAttr
[src]pub fn new(name: impl ToString) -> Self
[src]
pub fn new(name: impl ToString) -> Self
[src]Constructs named SingularAttr
with empty internal data
pub fn with(
name: impl ToString + AsRef<str>,
attrs: &[Attribute]
) -> Result<Self, Error>
[src]
pub fn with(
name: impl ToString + AsRef<str>,
attrs: &[Attribute]
) -> Result<Self, Error>
[src]Constructs ParametrizedAttr
from a vector of all syn-parsed
attributes, selecting attributes matching the provided name.
pub fn from_attribute(attr: &Attribute) -> Result<Self, Error>
[src]
pub fn from_attribute(attr: &Attribute) -> Result<Self, Error>
[src]Constructs ParametrizedAttr
from a given syn::Attribute
pub fn arg_literal_value(&self, name: &str) -> Result<Lit, Error>
[src]
pub fn arg_literal_value(&self, name: &str) -> Result<Lit, Error>
[src]Returns literal value for a given argument with name name
, if it is
defined, or fails with Error::ArgValueRequired
. See
ArgValue::literal_value
for the details.
pub fn has_verbatim(&self, verbatim: &str) -> bool
[src]
pub fn has_verbatim(&self, verbatim: &str) -> bool
[src]Checks if the attribute has a verbatim argument matching the provided
verbatim
string.
Verbatim arguments are arguments in form of #[attr(verbatim1, verbatim2]
, i.e. path arguments containing single path segment and no
value or nested arguments.
pub fn verbatim(&self) -> HashSet<String>
[src]
pub fn verbatim(&self) -> HashSet<String>
[src]Returns set of verbatim attribute arguments.
Verbatim arguments are arguments in form of #[attr(verbatim1, verbatim2]
, i.e. path arguments containing single path segment and no
value or nested arguments.
pub fn merge(&mut self, other: Self) -> Result<(), Error>
[src]
pub fn merge(&mut self, other: Self) -> Result<(), Error>
[src]Merges data from the other
into the self.
Errors
- Fails with
Error::NamesDontMatch
if the names of the self and theother
do not match - Fails with
Error::MultipleLiteralValues
if both self and theother
has a literals which values are not equal.
pub fn merged(self, other: Self) -> Result<Self, Error>
[src]
pub fn merged(self, other: Self) -> Result<Self, Error>
[src]Does merging as in ParametrizedAttr::merge
, but unlike it consumes
the self and returns a merged structure in case of the successful
operation. Useful in operation chains.
pub fn enrich(&mut self, attr: &Attribute) -> Result<(), Error>
[src]
pub fn enrich(&mut self, attr: &Attribute) -> Result<(), Error>
[src]Enriches current attribute data by adding information from the provided
syn::Attribute
.
Errors
- Fails with
Error::NamesDontMatch
if the names of the self and the provided attribute do not match - Fails with
Error::MultipleLiteralValues
if both self and the provided attribute has a literals which values are not equal.
pub fn enriched(self, attr: &Attribute) -> Result<Self, Error>
[src]
pub fn enriched(self, attr: &Attribute) -> Result<Self, Error>
[src]Performs enrich operation as in ParametrizedAttr::enrich
, but unlike
it consumes the self and returns an enriched structure in case of
the successful operation. Useful in operation chains.
pub fn fuse(&mut self, attr: &Attribute) -> Result<(), Error>
[src]
pub fn fuse(&mut self, attr: &Attribute) -> Result<(), Error>
[src]Fuses data from a nested attribute arguments (see Attribute
) into
the attribute parameters.
The operation is similar to the ParametrizedAttr::enrich
with the
only difference that enrichment operation takes the whole attribute, and
fusion takes a nested meta data.
pub fn fused(self, attr: &Attribute) -> Result<Self, Error>
[src]
pub fn fused(self, attr: &Attribute) -> Result<Self, Error>
[src]Performs enrich operation as in ParametrizedAttr::fuse
, but unlike
it consumes the self and returns an enriched structure in case of
the successful operation. Useful in operation chains.
pub fn check(&mut self, req: AttrReq) -> Result<(), Error>
[src]
pub fn check(&mut self, req: AttrReq) -> Result<(), Error>
[src]Checks that the structure meets provided value requirements (see
AttrReq
), generating Error
if the requirements are not met.
The procedure modifies the ParametrizedAttr
data in the following
ways:
- First, it fills in
ParametrizedAttr::paths
,ParametrizedAttr::integers
and [ParametrizedAttr::literal
] with default values from [AttrReq::paths
], [AttrReq::integers
] and [AttrReq::literal
] (correspondingly). ParametrizedAttr::paths
values matching ones specified in [AttrReq::args
] with values set to [ValueOccurrences::Default
] are moved intoParametrizedAttr::args
field.
Trait Implementations
impl Clone for ParametrizedAttr
[src]
impl Clone for ParametrizedAttr
[src]fn clone(&self) -> ParametrizedAttr
[src]
fn clone(&self) -> ParametrizedAttr
[src]Returns a copy of the value. Read more
fn clone_from(&mut self, source: &Self)
1.0.0[src]
fn clone_from(&mut self, source: &Self)
1.0.0[src]Performs copy-assignment from source
. Read more
Auto Trait Implementations
impl RefUnwindSafe for ParametrizedAttr
impl !Send for ParametrizedAttr
impl !Sync for ParametrizedAttr
impl Unpin for ParametrizedAttr
impl UnwindSafe for ParametrizedAttr
Blanket Implementations
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src]
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src]pub fn borrow_mut(&mut self) -> &mut T
[src]
pub fn borrow_mut(&mut self) -> &mut T
[src]Mutably borrows from an owned value. Read more
impl<T> ToOwned for T where
T: Clone,
[src]
impl<T> ToOwned for T where
T: Clone,
[src]type Owned = T
type Owned = T
The resulting type after obtaining ownership.
pub fn to_owned(&self) -> T
[src]
pub fn to_owned(&self) -> T
[src]Creates owned data from borrowed data, usually by cloning. Read more
pub fn clone_into(&self, target: &mut T)
[src]
pub fn clone_into(&self, target: &mut T)
[src]🔬 This is a nightly-only experimental API. (toowned_clone_into
)
recently added
Uses borrowed data to replace owned data, usually by cloning. Read more