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::compare::ElispFact;
use crate::types::PlainListItem;
use crate::wasm::to_wasm::ToWasmStandardProperties;

#[derive(Debug, Serialize, Deserialize)]
pub struct WasmPlainListItem {
    #[serde(flatten)]
    pub(crate) additional_properties: AdditionalProperties,
}

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

        Ok((
            children,
            WasmPlainListItem {
                additional_properties: AdditionalProperties::default(),
            },
        ))
    }
);