From 110630d230bb6e8663f0c5d8d54de4404f1621f6 Mon Sep 17 00:00:00 2001 From: Tom Alexander Date: Sat, 30 Dec 2023 12:14:03 -0500 Subject: [PATCH] Implement radio link and regular link. --- src/wasm/radio_link.rs | 21 ++++++++++++++++----- src/wasm/regular_link.rs | 34 +++++++++++++++++++++++++++++----- 2 files changed, 45 insertions(+), 10 deletions(-) diff --git a/src/wasm/radio_link.rs b/src/wasm/radio_link.rs index f217af7..cec349d 100644 --- a/src/wasm/radio_link.rs +++ b/src/wasm/radio_link.rs @@ -4,15 +4,22 @@ 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::RadioLink; use crate::wasm::to_wasm::ToWasmStandardProperties; #[derive(Debug, Serialize, Deserialize)] +#[serde(tag = "format")] +#[serde(rename = "plain")] pub struct WasmRadioLink { - #[serde(flatten)] - pub(crate) additional_properties: AdditionalProperties, + #[serde(rename = "type")] + pub(crate) link_type: String, + pub(crate) path: String, + #[serde(rename = "raw-link")] + pub(crate) raw_link: String, + pub(crate) application: Option, // Always None + #[serde(rename = "search-option")] + pub(crate) search_option: Option, // Always None } to_wasm!( @@ -21,7 +28,7 @@ to_wasm!( original, wasm_context, { WasmAstNode::RadioLink(original) }, - { "TODO".into() }, + { "link".into() }, { let children = original .children @@ -36,7 +43,11 @@ to_wasm!( Ok(( children, WasmRadioLink { - additional_properties: AdditionalProperties::default(), + link_type: "radio".to_owned(), + path: original.path.to_owned(), + raw_link: original.get_raw_link().to_owned(), + application: None, + search_option: None, }, )) } diff --git a/src/wasm/regular_link.rs b/src/wasm/regular_link.rs index 5374394..a707c85 100644 --- a/src/wasm/regular_link.rs +++ b/src/wasm/regular_link.rs @@ -1,18 +1,28 @@ +use std::borrow::Cow; + 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::LinkType; use crate::types::RegularLink; use crate::wasm::to_wasm::ToWasmStandardProperties; #[derive(Debug, Serialize, Deserialize)] +#[serde(tag = "format")] +#[serde(rename = "bracket")] pub struct WasmRegularLink { - #[serde(flatten)] - pub(crate) additional_properties: AdditionalProperties, + #[serde(rename = "type")] + pub(crate) link_type: String, + pub(crate) path: String, + #[serde(rename = "raw-link")] + pub(crate) raw_link: String, + pub(crate) application: Option, + #[serde(rename = "search-option")] + pub(crate) search_option: Option, } to_wasm!( @@ -21,7 +31,7 @@ to_wasm!( original, wasm_context, { WasmAstNode::RegularLink(original) }, - { "TODO".into() }, + { "link".into() }, { let children = original .children @@ -36,7 +46,21 @@ to_wasm!( Ok(( children, WasmRegularLink { - additional_properties: AdditionalProperties::default(), + link_type: match &original.link_type { + LinkType::File => "file".to_owned(), + LinkType::Protocol(protocol) => protocol.clone().into_owned(), + LinkType::Id => "id".to_owned(), + LinkType::CustomId => "custom-id".to_owned(), + LinkType::CodeRef => "coderef".to_owned(), + LinkType::Fuzzy => "fuzzy".to_owned(), + }, + path: original.get_path().into_owned(), + raw_link: original.get_raw_link().into_owned(), + application: original + .application + .as_ref() + .map(|c| c.clone().into_owned()), + search_option: original.get_search_option().map(Cow::into_owned), }, )) }