pub trait IdentExt: Sized + Sealed {
fn parse_any(input: ParseStream<'_>) -> Result<Self>;
}
Expand description
Additional parsing methods for Ident
.
This trait is sealed and cannot be implemented for types outside of Syn.
This trait is available if Syn is built with the "parsing"
feature.
Required Methods
sourcefn parse_any(input: ParseStream<'_>) -> Result<Self>
fn parse_any(input: ParseStream<'_>) -> Result<Self>
Parses any identifier including keywords.
This is useful when parsing a DSL which allows Rust keywords as identifiers.
#[macro_use]
extern crate syn;
use syn::Ident;
use syn::ext::IdentExt;
use syn::parse::{Error, ParseStream, Result};
// Parses input that looks like `name = NAME` where `NAME` can be
// any identifier.
//
// Examples:
//
// name = anything
// name = impl
fn parse_dsl(input: ParseStream) -> Result<Ident> {
let name_token: Ident = input.parse()?;
if name_token != "name" {
return Err(Error::new(name_token.span(), "expected `name`"));
}
input.parse::<Token![=]>()?;
let name = input.call(Ident::parse_any)?;
Ok(name)
}