From 3131f8ac6454e5274249ba16655c9ba4120248c1 Mon Sep 17 00:00:00 2001 From: Tom Alexander Date: Sat, 30 Dec 2023 17:50:38 -0500 Subject: [PATCH] Implement example block and export block. --- src/wasm/example_block.rs | 46 +++++++++++++++++++++++++++++++++++++-- src/wasm/export_block.rs | 14 ++++++++++-- src/wasm/src_block.rs | 8 +++---- 3 files changed, 60 insertions(+), 8 deletions(-) diff --git a/src/wasm/example_block.rs b/src/wasm/example_block.rs index 7c3fb9ca..a1466c76 100644 --- a/src/wasm/example_block.rs +++ b/src/wasm/example_block.rs @@ -3,16 +3,35 @@ use serde::Serialize; use super::ast_node::WasmAstNode; use super::macros::to_wasm; +use super::src_block::WasmNumberLines; +use super::src_block::WasmNumberLinesWrapper; +use super::src_block::WasmRetainLabels; use super::to_wasm::ToWasm; use super::AdditionalProperties; use crate::compare::ElispFact; +use crate::types::CharOffsetInLine; use crate::types::ExampleBlock; +use crate::types::GetAffiliatedKeywords; +use crate::types::RetainLabels; +use crate::types::SwitchNumberLines; use crate::wasm::to_wasm::ToWasmStandardProperties; #[derive(Debug, Serialize, Deserialize)] pub struct WasmExampleBlock { #[serde(flatten)] pub(crate) additional_properties: AdditionalProperties, + pub(crate) value: String, + pub(crate) switches: Option, + #[serde(rename = "number-lines")] + pub(crate) number_lines: Option, + #[serde(rename = "preserve-indent")] + pub(crate) preserve_indent: Option, + #[serde(rename = "retain-labels")] + pub(crate) retain_labels: WasmRetainLabels, + #[serde(rename = "use-labels")] + pub(crate) use_labels: bool, + #[serde(rename = "label-fmt")] + pub(crate) label_format: Option, } to_wasm!( @@ -21,12 +40,35 @@ to_wasm!( original, wasm_context, { WasmAstNode::ExampleBlock(original) }, - { "TODO".into() }, + { "example-block".into() }, { + let additional_properties = original + .get_affiliated_keywords() + .to_wasm(wasm_context.clone())?; + Ok(( Vec::new(), WasmExampleBlock { - additional_properties: AdditionalProperties::default(), + additional_properties, + value: original.get_value().into_owned(), + switches: original.switches.map(|s| s.to_owned()), + number_lines: match original.number_lines { + None => None, + Some(SwitchNumberLines::New(n)) => Some(WasmNumberLinesWrapper { + inner: WasmNumberLines::New(n), + }), + Some(SwitchNumberLines::Continued(n)) => Some(WasmNumberLinesWrapper { + inner: WasmNumberLines::continued(n), + }), + }, + preserve_indent: original.preserve_indent, + retain_labels: match original.retain_labels { + RetainLabels::No => WasmRetainLabels::YesNo(false), + RetainLabels::Yes => WasmRetainLabels::YesNo(true), + RetainLabels::Keep(n) => WasmRetainLabels::Keep(n), + }, + use_labels: original.use_labels, + label_format: original.label_format.map(|s| s.to_owned()), }, )) } diff --git a/src/wasm/export_block.rs b/src/wasm/export_block.rs index 3fe88283..5989ce49 100644 --- a/src/wasm/export_block.rs +++ b/src/wasm/export_block.rs @@ -7,12 +7,16 @@ use super::to_wasm::ToWasm; use super::AdditionalProperties; use crate::compare::ElispFact; use crate::types::ExportBlock; +use crate::types::GetAffiliatedKeywords; use crate::wasm::to_wasm::ToWasmStandardProperties; #[derive(Debug, Serialize, Deserialize)] pub struct WasmExportBlock { #[serde(flatten)] pub(crate) additional_properties: AdditionalProperties, + #[serde(rename = "type")] + pub(crate) export_type: Option, + pub(crate) value: String, } to_wasm!( @@ -21,12 +25,18 @@ to_wasm!( original, wasm_context, { WasmAstNode::ExportBlock(original) }, - { "TODO".into() }, + { "export-block".into() }, { + let additional_properties = original + .get_affiliated_keywords() + .to_wasm(wasm_context.clone())?; + Ok(( Vec::new(), WasmExportBlock { - additional_properties: AdditionalProperties::default(), + additional_properties, + export_type: original.get_export_type(), + value: original.get_value().into_owned(), }, )) } diff --git a/src/wasm/src_block.rs b/src/wasm/src_block.rs index 620a7d51..77b75e0a 100644 --- a/src/wasm/src_block.rs +++ b/src/wasm/src_block.rs @@ -36,13 +36,13 @@ pub struct WasmSrcBlock { #[derive(Debug, Serialize, Deserialize)] #[serde(untagged)] -enum WasmRetainLabels { +pub(crate) enum WasmRetainLabels { YesNo(bool), Keep(CharOffsetInLine), } #[derive(Debug, Serialize, Deserialize)] -enum WasmNumberLines { +pub(crate) enum WasmNumberLines { #[serde(rename = "new")] New(LineNumber), #[serde(rename = "continued")] @@ -52,9 +52,9 @@ enum WasmNumberLines { #[derive(Debug, Serialize, Deserialize)] #[serde(rename = "number-lines")] #[serde(tag = "number-lines")] -struct WasmNumberLinesWrapper { +pub(crate) struct WasmNumberLinesWrapper { #[serde(flatten)] - inner: WasmNumberLines, + pub(crate) inner: WasmNumberLines, } to_wasm!(