pub struct BindingInfo<'a> {
    pub binding: Ident,
    pub style: BindStyle,
    /* private fields */
}
Expand description

Information about a specific binding. This contains both an Ident reference to the given field, and the syn &'a Field descriptor for that field.

This type supports quote::ToTokens, so can be directly used within the quote! macro. It expands to a reference to the matched field.

Fields§

§binding: Ident

The name which this BindingInfo will bind to.

§style: BindStyle

The type of binding which this BindingInfo will create.

Implementations§

source§

impl<'a> BindingInfo<'a>

source

pub fn ast(&self) -> &'a Field

Returns a reference to the underlying syn AST node which this BindingInfo references

source

pub fn pat(&self) -> TokenStream

Generates the pattern fragment for this field binding.

§Example
let di: syn::DeriveInput = syn::parse_quote! {
    enum A {
        B{ a: i32, b: i32 },
        C(u32),
    }
};
let s = Structure::new(&di);

assert_eq!(
    s.variants()[0].bindings()[0].pat().to_string(),
    quote! {
        ref __binding_0
    }.to_string()
);
source

pub fn referenced_ty_params(&self) -> Vec<&'a Ident>

Returns a list of the type parameters which are referenced in this field’s type.

§Caveat

If the field contains any macros in type position, all parameters will be considered bound. This is because we cannot determine which type parameters are bound by type macros.

§Example
let di: syn::DeriveInput = syn::parse_quote! {
    struct A<T, U> {
        a: Option<T>,
        b: U,
    }
};
let mut s = Structure::new(&di);

assert_eq!(
    s.variants()[0].bindings()[0].referenced_ty_params(),
    &[&quote::format_ident!("T")]
);

Trait Implementations§

source§

impl<'a> Clone for BindingInfo<'a>

source§

fn clone(&self) -> BindingInfo<'a>

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl<'a> Debug for BindingInfo<'a>

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'a> Hash for BindingInfo<'a>

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl<'a> PartialEq for BindingInfo<'a>

source§

fn eq(&self, other: &BindingInfo<'a>) -> bool

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
source§

impl<'a> ToTokens for BindingInfo<'a>

source§

fn to_tokens(&self, tokens: &mut TokenStream)

Write self to the given TokenStream. Read more
source§

fn to_token_stream(&self) -> TokenStream

Convert self directly into a TokenStream object. Read more
source§

fn into_token_stream(self) -> TokenStream
where Self: Sized,

Convert self directly into a TokenStream object. Read more
source§

impl<'a> Eq for BindingInfo<'a>

source§

impl<'a> StructuralPartialEq for BindingInfo<'a>

Auto Trait Implementations§

§

impl<'a> RefUnwindSafe for BindingInfo<'a>

§

impl<'a> !Send for BindingInfo<'a>

§

impl<'a> !Sync for BindingInfo<'a>

§

impl<'a> Unpin for BindingInfo<'a>

§

impl<'a> UnwindSafe for BindingInfo<'a>

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T, U> Into<U> for T
where U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T> Spanned for T
where T: Spanned + ?Sized,

source§

fn span(&self) -> Span

Returns a Span covering the complete contents of this syntax tree node, or Span::call_site() if this node is empty.
source§

impl<T> ToOwned for T
where T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.