penum 0.1.30

Make enum conform to a given pattern
Documentation
use proc_macro2::TokenStream;
use quote::ToTokens;
use syn::{AttrStyle, Attribute};

use super::Subject;

impl ToTokens for Subject {
    fn to_tokens(&self, tokens: &mut TokenStream) {
        self.attrs
            .iter()
            .filter(is_outer)
            .for_each(|attr| attr.to_tokens(tokens));

        self.vis.to_tokens(tokens);
        self.data.enum_token.to_tokens(tokens);
        self.ident.to_tokens(tokens);
        self.generics.to_tokens(tokens);

        self.generics.where_clause.to_tokens(tokens);
        self.data.brace_token.surround(tokens, |tokens| {
            self.data.variants.to_tokens(tokens);
        });
    }
}

#[inline(always)]
fn is_outer(attr: &&Attribute) -> bool {
    match attr.style {
        AttrStyle::Outer => true,
        AttrStyle::Inner(_) => false,
    }
}