use crate::ast::{LayerBlock, LayerStmt, ModelAst, ParamStmt, ParamsBlock};
use proc_macro2::TokenStream;
use quote::quote;
use syn::Ident;
pub fn impl_model(
ModelAst {
model,
layer_block: layers,
params_block: params,
..
}: ModelAst,
) -> TokenStream {
if params.is_none() && layers.is_none() {
return TokenStream::new();
}
if layers.is_some() && params.is_none() {
return syn::Error::new_spanned(model, "edges cannot be defined without nodes")
.to_compile_error();
}
let mut stmts = Vec::new();
if let Some(ParamsBlock { contents, .. }) = ¶ms {
contents.iter().for_each(|node| {
let stmt = handle_params(&model, node);
stmts.push(stmt);
});
}
if let Some(LayerBlock { contents, .. }) = &layers {
contents.iter().for_each(|edge| {
let stmt = handle_layer(&model, edge);
stmts.push(stmt);
});
}
quote! {
#(#stmts)*
}
}
pub fn handle_layer(_model: &Ident, _layer: &LayerStmt) -> TokenStream {
quote! {}
}
pub fn handle_params(_model: &Ident, _params: &ParamStmt) -> TokenStream {
quote! {}
}