use proc_macro2::TokenStream as TokenStream2;
use quote::quote;
use crate::parser::command_spec::{DocIdentifier, Enumeration};
impl Enumeration {
pub fn to_rust(&self) -> TokenStream2 {
let doc_comments: TokenStream2 = self
.attributes
.iter()
.map(|attr| attr.to_rust(&self.identifier))
.collect();
let ident = self.identifier.to_rust();
let states: Vec<TokenStream2> = self.states.iter().map(DocIdentifier::to_rust).collect();
let paired_type = {
let path = self.identifier.variant.to_c_path();
let ident = self.identifier.to_c();
if path.is_empty() {
quote! {
crate :: #ident
}
} else {
quote! {
#path :: #ident
}
}
};
let convertible = self.derive_from_rust_paried_c(&paired_type);
quote! {
#doc_comments
#[allow(non_camel_case_types)]
#[derive(Debug)]
pub enum #ident {
#(#states),*
}
#convertible
}
}
}