pkenum_core 0.3.1

Core logic for pkenum.
Documentation
use syn::{ ItemEnum, Item, parse2 };
use proc_macro2::TokenStream;
use quote::ToTokens;
use crate::error::ParseError;
use crate::extension::FromTokens;

impl FromTokens for ItemEnum {
    /// Converts `TokenStream` to `ItemEnum`.
    ///
    /// # Panics
    /// - If `TokenStream` cannot be parsed to `ItemEnum`.
    /// - If parsing fails for whatever reason, see `syn::parse2` for details.
    fn from_tokens(tokens: TokenStream) -> Result<Self, ParseError> {
        match parse2::<Item>(tokens) {
            Ok(Item::Enum(item)) => Ok(item),
            Ok(item) => Err(
                ParseError::new(
                    item.to_token_stream(),
                    String::from("item is not an enum"),
                    String::from("pkenum::Display can only be used on enums"))),
            Err(_) => unreachable!(),
        }
    }
}