ice_rs/slice/
structure.rs

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