1use crate::{Doc, Function, Ident, Import, Item, Visibility};
2use proc_macro2::TokenStream;
3use std::fmt::{Debug, Formatter};
4
5#[derive(Default)]
6pub struct Class<T> {
7 pub vis: Visibility,
8 pub name: Ident,
9 pub doc: Option<Doc>,
10 pub fields: Vec<Field<T>>,
11 pub methods: Vec<Function<T>>,
12 pub attributes: Vec<T>,
13 pub lifetimes: Vec<String>,
14 pub items: Vec<Item<TokenStream>>,
15 pub imports: Vec<Import>,
16}
17
18#[derive(Debug, Default)]
19pub struct Field<T> {
20 pub name: Ident,
21 pub ty: T,
22 pub default: Option<T>,
23 pub vis: Visibility,
24 pub doc: Option<Doc>,
25 pub optional: bool,
26 pub attributes: Vec<T>,
27}
28
29impl Debug for Class<String> {
30 fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
31 f.debug_struct("Class")
32 .field("name", &self.name)
33 .field("doc", &self.doc)
34 .field("fields", &self.fields)
35 .field("vis", &self.vis)
36 .finish()
37 }
38}