1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
use quote::{__private::TokenStream, quote}; use super::struct_member::StructMember; #[derive(Clone, Debug)] pub struct Struct { pub id: TokenStream, pub ice_id: String, pub members: Vec<StructMember> } impl Struct { pub fn empty() -> Struct { Struct { id: TokenStream::new(), ice_id: String::new(), members: Vec::new() } } pub fn add_member(&mut self, member: StructMember) { self.members.push(member); } pub fn generate(&self) -> Result<TokenStream, Box<dyn std::error::Error>> { let id_token = &self.id; let member_tokens = self.members.iter().map(|member| { member.declare() }).collect::<Vec<_>>(); Ok(quote! { #[derive(Debug, Clone, PartialEq, IceDerive)] pub struct #id_token { #(#member_tokens),* } }) } }