Macro syn::named
[−]
[src]
macro_rules! named { ($name:ident -> $o:ty, $submac:ident!( $($args:tt)* )) => { ... }; (pub $name:ident -> $o:ty, $submac:ident!( $($args:tt)* )) => { ... }; ($name:ident($($params:tt)*) -> $o:ty, $submac:ident!( $($args:tt)* )) => { ... }; (pub $name:ident($($params:tt)*) -> $o:ty, $submac:ident!( $($args:tt)* )) => { ... }; }
Define a parser function with the signature expected by syn parser combinators.
The function may be the parse
function of the Synom
trait, or it may
be a free-standing function with an arbitrary name. When implementing the
Synom
trait, the function name is parse
and the return type is Self
.
- Syntax:
named!(NAME -> TYPE, PARSER)
ornamed!(pub NAME -> TYPE, PARSER)
#[macro_use] extern crate syn; use syn::Type; use syn::punctuated::Punctuated; use syn::synom::Synom; /// Parses one or more Rust types separated by commas. /// /// Example: `String, Vec<T>, [u8; LEN + 1]` named!(pub comma_separated_types -> Punctuated<Type, Token![,]>, call!(Punctuated::parse_separated_nonempty) ); /// The same function as a `Synom` implementation. struct CommaSeparatedTypes { types: Punctuated<Type, Token![,]>, } impl Synom for CommaSeparatedTypes { /// As the default behavior, we want there to be at least 1 type. named!(parse -> Self, do_parse!( types: call!(Punctuated::parse_separated_nonempty) >> (CommaSeparatedTypes { types }) )); } impl CommaSeparatedTypes { /// A separate parser that the user can invoke explicitly which allows /// for parsing 0 or more types, rather than the default 1 or more. named!(pub parse0 -> Self, do_parse!( types: call!(Punctuated::parse_separated) >> (CommaSeparatedTypes { types }) )); }
This macro is available if Syn is built with the "parsing"
feature.