From dc080b30fc4afdc7ce11645bbeeb12180cd3cd5b Mon Sep 17 00:00:00 2001 From: Tom Alexander Date: Sat, 30 Dec 2023 16:35:01 -0500 Subject: [PATCH] Implement citation reference. --- src/wasm/citation_reference.rs | 39 +++++++++++++++++++++++++++++----- 1 file changed, 34 insertions(+), 5 deletions(-) diff --git a/src/wasm/citation_reference.rs b/src/wasm/citation_reference.rs index bb9e18f4..11eff5cd 100644 --- a/src/wasm/citation_reference.rs +++ b/src/wasm/citation_reference.rs @@ -4,15 +4,15 @@ 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::CitationReference; use crate::wasm::to_wasm::ToWasmStandardProperties; #[derive(Debug, Serialize, Deserialize)] pub struct WasmCitationReference { - #[serde(flatten)] - pub(crate) additional_properties: AdditionalProperties, + pub(crate) key: String, + pub(crate) prefix: Option>, + pub(crate) suffix: Option>, } to_wasm!( @@ -21,12 +21,41 @@ to_wasm!( original, wasm_context, { WasmAstNode::CitationReference(original) }, - { "TODO".into() }, + { "citation-reference".into() }, { + let prefix = original + .prefix + .iter() + .map(|child| { + child + .to_wasm(wasm_context.clone()) + .map(Into::::into) + }) + .collect::, _>>()?; + let suffix = original + .suffix + .iter() + .map(|child| { + child + .to_wasm(wasm_context.clone()) + .map(Into::::into) + }) + .collect::, _>>()?; + Ok(( Vec::new(), WasmCitationReference { - additional_properties: AdditionalProperties::default(), + key: original.key.to_owned(), + prefix: if prefix.is_empty() { + None + } else { + Some(prefix) + }, + suffix: if suffix.is_empty() { + None + } else { + Some(suffix) + }, }, )) }