enum_dispatch/attributed_parser.rs
1//! Contains helper utilities for parsing items that have been annotated with the `enum_dispatch`
2//! procedural macro attribute.
3use crate::enum_dispatch_item;
4
5/// Enumerates all successful results of parsing an `enum_dispatch` annotated syntax block.
6#[derive(Clone)]
7pub enum ParsedItem {
8 Trait(syn::ItemTrait),
9 EnumDispatch(enum_dispatch_item::EnumDispatchItem),
10}
11
12/// Parses any syntax item that was annotated with the `enum_dispatch` attribute and returns its
13/// itemized results.
14pub fn parse_attributed(item: proc_macro2::TokenStream) -> Result<ParsedItem, ()> {
15 if let Ok(enumdef) = syn::parse2(item.clone()) {
16 Ok(ParsedItem::EnumDispatch(enumdef))
17 } else if let Ok(traitdef) = syn::parse2(item) {
18 Ok(ParsedItem::Trait(traitdef))
19 } else {
20 Err(())
21 }
22}