Enum Pat
enum Pat
A pattern in a local binding, function signature, match expression, or various other places.
Syntax tree enum
This type is a syntax tree enum.
Variants
-
Const(PatConst) A const block:
const { ... }.-
Ident(PatIdent) A pattern that binds a new variable:
ref mut binding @ SUBPATTERN.-
Lit(PatLit) A literal pattern:
0.-
Macro(PatMacro) A macro in pattern position.
-
Or(PatOr) A pattern that matches any one of a set of cases.
-
Paren(PatParen) A parenthesized pattern:
(A | B).-
Path(PatPath) A path pattern like
Color::Red, optionally qualified with a self-type.Unqualified path patterns can legally refer to variants, structs, constants or associated constants. Qualified path patterns like
<A>::B::Cand<A as Trait>::B::Ccan only legally refer to associated constants.-
Range(PatRange) A range pattern:
1..=2.-
Reference(PatReference) A reference pattern:
&mut var.-
Rest(PatRest) The dots in a tuple or slice pattern:
[0, 1, ..].-
Slice(PatSlice) A dynamically sized slice pattern:
[a, b, ref i @ .., y, z].-
Struct(PatStruct) A struct or struct variant pattern:
Variant { x, y, .. }.-
Tuple(PatTuple) A tuple pattern:
(a, b).-
TupleStruct(PatTupleStruct) A tuple struct or tuple variant pattern:
Variant(x, y, .., z).-
Type(PatType) A type ascription pattern:
foo: f64.-
Verbatim(proc_macro2::TokenStream) Tokens in pattern position not interpreted by Syn.
-
Wild(PatWild) A pattern that matches any value:
_.
Implementations
impl Pat
fn parse_single(input: ParseStream<'_>) -> Result<Self>Parse a pattern that does not involve
|at the top level.This parser matches the behavior of the
$:pat_parammacro_rules matcher, and on editions prior to Rust 2021, the behavior of$:pat.In Rust syntax, some examples of where this syntax would occur are in the argument pattern of functions and closures. Patterns using
|are not allowed to occur in these positions.fn f(Some(_) | None: Option<T>) { let _ = |Some(_) | None: Option<T>| {}; // ^^^^^^^^^^^^^^^^^^^^^^^^^??? :( }error: top-level or-patterns are not allowed in function parameters --> src/main.rs:1:6 | 1 | fn f(Some(_) | None: Option<T>) { | ^^^^^^^^^^^^^^ help: wrap the pattern in parentheses: `(Some(_) | None)`fn parse_multi(input: ParseStream<'_>) -> Result<Self>Parse a pattern, possibly involving
|, but not a leading|.fn parse_multi_with_leading_vert(input: ParseStream<'_>) -> Result<Self>Parse a pattern, possibly involving
|, possibly including a leading|.This parser matches the behavior of the Rust 2021 edition's
$:patmacro_rules matcher.In Rust syntax, an example of where this syntax would occur is in the pattern of a
matcharm, where the language permits an optional leading|, although it is not idiomatic to write one there in handwritten code.# let wat = None; match watThe compiler accepts it only to facilitate some situations in macro-generated code where a macro author might need to write:
# # }; # } # # doc!; # doc!; # doc!;Expressing the same thing correctly in the case that either one (but not both) of
$conditions1and$conditions2might be empty, without leading|, is complex.Use
Pat::parse_multiinstead if you are not intending to support macro-generated macro input.
impl Clone for Pat
fn clone(self: &Self) -> Self
impl Debug for Pat
fn fmt(self: &Self, formatter: &mut Formatter<'_>) -> Result
impl Eq for Pat
impl Freeze for Pat
impl From for Pat
fn from(e: PatRest) -> Pat
impl From for Pat
fn from(e: PatType) -> Pat
impl From for Pat
fn from(e: PatOr) -> Pat
impl From for Pat
fn from(e: PatStruct) -> Pat
impl From for Pat
fn from(e: PatConst) -> Pat
impl From for Pat
fn from(e: PatMacro) -> Pat
impl From for Pat
fn from(e: PatReference) -> Pat
impl From for Pat
fn from(e: PatTupleStruct) -> Pat
impl From for Pat
fn from(e: PatLit) -> Pat
impl From for Pat
fn from(e: PatIdent) -> Pat
impl From for Pat
fn from(e: PatPath) -> Pat
impl From for Pat
fn from(e: PatSlice) -> Pat
impl From for Pat
fn from(e: PatWild) -> Pat
impl From for Pat
fn from(e: PatRange) -> Pat
impl From for Pat
fn from(e: PatParen) -> Pat
impl From for Pat
fn from(e: PatTuple) -> Pat
impl Hash for Pat
fn hash<H>(self: &Self, state: &mut H) where H: Hasher
impl PartialEq for Pat
fn eq(self: &Self, other: &Self) -> bool
impl RefUnwindSafe for Pat
impl Send for Pat
impl Sync for Pat
impl ToTokens for Pat
fn to_tokens(self: &Self, tokens: &mut TokenStream)
impl Unpin for Pat
impl UnsafeUnpin for Pat
impl UnwindSafe for Pat
impl<T> Any for Pat
fn type_id(self: &Self) -> TypeId
impl<T> Borrow for Pat
fn borrow(self: &Self) -> &T
impl<T> BorrowMut for Pat
fn borrow_mut(self: &mut Self) -> &mut T
impl<T> CloneToUninit for Pat
unsafe fn clone_to_uninit(self: &Self, dest: *mut u8)
impl<T> From for Pat
fn from(t: T) -> TReturns the argument unchanged.
impl<T> Spanned for Pat
fn span(self: &Self) -> Span
impl<T> ToOwned for Pat
fn to_owned(self: &Self) -> Tfn clone_into(self: &Self, target: &mut T)
impl<T, U> Into for Pat
fn into(self: Self) -> UCalls
U::from(self).That is, this conversion is whatever the implementation of
[From]<T> for Uchooses to do.
impl<T, U> TryFrom for Pat
fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
impl<T, U> TryInto for Pat
fn try_into(self: Self) -> Result<U, <U as TryFrom<T>>::Error>