use serde::Deserialize; use serde::Serialize; use super::ast_node::WasmAstNode; use super::macros::to_wasm; use super::to_wasm::ToWasm; use super::AdditionalProperties; use crate::util::elisp_fact::ElispFact; use crate::types::DynamicBlock; use crate::types::GetAffiliatedKeywords; use crate::wasm::to_wasm::ToWasmStandardProperties; #[derive(Debug, Serialize, Deserialize)] pub struct WasmDynamicBlock { #[serde(flatten)] pub(crate) additional_properties: AdditionalProperties, #[serde(rename = "block-name")] pub(crate) block_name: String, pub(crate) arguments: Option, } to_wasm!( WasmDynamicBlock, DynamicBlock<'s>, original, wasm_context, { WasmAstNode::DynamicBlock(original) }, { "dynamic-block".into() }, { let additional_properties = original .get_affiliated_keywords() .to_wasm(wasm_context.clone())?; let children = original .children .iter() .map(|child| { child .to_wasm(wasm_context.clone()) .map(Into::::into) }) .collect::, _>>()?; Ok(( children, WasmDynamicBlock { additional_properties, block_name: original.block_name.to_owned(), arguments: original.parameters.map(|s| s.to_owned()), }, )) } );