use crate::types::RustType;
use askama::Template;
use syn::ItemStruct;
#[derive(Clone, Debug, Template)]
#[template(path = "struct.ts.j2", escape = "txt")]
pub struct StructDeclaration {
ident: String,
fields: Vec<(Option<String>, RustType)>,
}
impl StructDeclaration {
pub fn new(ident: String) -> Self {
StructDeclaration {
ident,
fields: Default::default(),
}
}
pub fn is_tuple(&self) -> bool {
self.fields.iter().all(|(id, _)| id.is_none())
}
}
impl From<ItemStruct> for StructDeclaration {
fn from(node: ItemStruct) -> Self {
let mut e = StructDeclaration::new(node.ident.to_string());
for field in node.fields.into_iter() {
e.fields
.push((field.ident.map(|i| i.to_string()), field.ty.into()))
}
e
}
}