use serde::Deserialize;
use serde::Serialize;

use super::ast_node::WasmAstNode;
use super::macros::to_wasm;
use super::to_wasm::ToWasm;
use crate::util::elisp_fact::ElispFact;
use crate::types::TableCell;
use crate::wasm::to_wasm::ToWasmStandardProperties;

#[derive(Debug, Serialize, Deserialize)]
pub struct WasmTableCell {}

to_wasm!(
    WasmTableCell,
    TableCell<'s>,
    original,
    wasm_context,
    { WasmAstNode::TableCell(original) },
    { "table-cell".into() },
    {
        let children = original
            .children
            .iter()
            .map(|child| {
                child
                    .to_wasm(wasm_context.clone())
                    .map(Into::<WasmAstNode>::into)
            })
            .collect::<Result<Vec<_>, _>>()?;

        Ok((children, WasmTableCell {}))
    }
);