ice_rs/slice/
structure.rs1use 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}