diff --git a/src/intermediate/regular_link.rs b/src/intermediate/regular_link.rs index bd86a2d..7fb3d5a 100644 --- a/src/intermediate/regular_link.rs +++ b/src/intermediate/regular_link.rs @@ -41,14 +41,24 @@ intermediate!( #[derive(Debug, Clone)] pub(crate) enum LinkTarget { Raw(String), - Post { post_id: String }, + Post { post_id: Option }, } impl LinkTarget { pub(crate) fn from_string>(input: S) -> Result { fn impl_from_string(input: &str) -> Result { let parsed = Url::parse(input)?; - Ok(LinkTarget::Raw(input.to_owned())) + match parsed.scheme() { + "post" => { + let post_id = parsed + .path_segments() + .ok_or_else(|| "cannot be base")? + .next() + .map(str::to_owned); + Ok(LinkTarget::Post { post_id }) + } + _ => Ok(LinkTarget::Raw(input.to_owned())), + } } impl_from_string(input.as_ref()) }