From 86d4e25aa0aba71c11ae467f7f304d7e0ce1be24 Mon Sep 17 00:00:00 2001 From: Tom Alexander Date: Sat, 23 Dec 2023 20:35:27 -0500 Subject: [PATCH] Add support for a target variable in regular links. This will initially be used for supporting "post://" links. --- src/context/regular_link.rs | 7 +++++++ src/intermediate/regular_link.rs | 25 ++++++++++++++++++++++++- 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/src/context/regular_link.rs b/src/context/regular_link.rs index 9a84f51..e247cb8 100644 --- a/src/context/regular_link.rs +++ b/src/context/regular_link.rs @@ -11,6 +11,7 @@ use super::RenderObject; #[serde(tag = "type")] #[serde(rename = "regular_link")] pub(crate) struct RenderRegularLink { + target: String, raw_link: String, children: Vec, post_blank: organic::types::PostBlank, @@ -25,7 +26,13 @@ render!(RenderRegularLink, IRegularLink, original, render_context, { ret }; + let target = original + .target + .generate_final_target()? + .unwrap_or_else(|| "".to_owned()); + Ok(RenderRegularLink { + target: target, raw_link: original.raw_link.clone(), children, post_blank: original.post_blank, diff --git a/src/intermediate/regular_link.rs b/src/intermediate/regular_link.rs index 2b2c249..c0c11e9 100644 --- a/src/intermediate/regular_link.rs +++ b/src/intermediate/regular_link.rs @@ -9,6 +9,7 @@ use crate::error::CustomError; pub(crate) struct IRegularLink { pub(crate) raw_link: String, pub(crate) children: Vec, + pub(crate) target: LinkTarget, pub(crate) post_blank: organic::types::PostBlank, } @@ -25,10 +26,32 @@ intermediate!( } ret }; + let raw_link = original.get_raw_link(); + let target = LinkTarget::from_string(&raw_link)?; Ok(IRegularLink { - raw_link: original.get_raw_link().into_owned(), + raw_link: raw_link.into_owned(), children, + target, post_blank: original.get_post_blank(), }) } ); + +#[derive(Debug, Clone)] +pub(crate) enum LinkTarget { + Raw(String), + Post { post_id: String }, +} + +impl LinkTarget { + pub(crate) fn from_string>(input: S) -> Result { + fn impl_from_string(input: &str) -> Result { + Ok(LinkTarget::Raw(input.to_owned())) + } + impl_from_string(input.as_ref()) + } + + pub(crate) fn generate_final_target(&self) -> Result, CustomError> { + todo!() + } +}