use proc_macro2::TokenStream as TokenStream2;
use quote::quote;
use crate::parser::command_spec::{DocNamedType, Structure};
impl Structure {
pub fn to_c(&self) -> TokenStream2 {
let ident = &self.identifier.to_c();
let doc_comments: TokenStream2 = self
.attributes
.iter()
.map(|attr| attr.to_rust(&self.identifier))
.collect();
let contents: Vec<TokenStream2> = self
.contents
.iter()
.filter_map(|a| DocNamedType::to_c(a))
.collect();
let paired_type = self.identifier.to_rust_paired();
let into_impl = &self.derive_from_c_paired_rust(&paired_type);
quote! {
#doc_comments
#[allow(non_camel_case_types)]
#[repr(C)]
#[derive(Debug)]
pub struct #ident {
#(#contents),*
}
#into_impl
}
}
}