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}