noosphere_into/resolver/
html.rs

1use anyhow::{anyhow, Result};
2use async_trait::async_trait;
3use subtext::{Peer, Slashlink};
4
5use crate::{ResolvedLink, Resolver};
6
7/// A [Resolver] that is suitable for resolving a [Slashlink] to an `href` for
8/// a basic static website generator.
9#[derive(Clone)]
10pub struct StaticHtmlResolver();
11
12#[cfg_attr(not(target_arch = "wasm32"), async_trait)]
13#[cfg_attr(target_arch = "wasm32", async_trait(?Send))]
14impl Resolver for StaticHtmlResolver {
15    async fn resolve(&self, link: &Slashlink) -> Result<ResolvedLink> {
16        match link {
17            Slashlink {
18                slug: Some(slug),
19                peer: Peer::None,
20            } => Ok(ResolvedLink::Slashlink {
21                link: link.clone(),
22                href: format!("/{slug}"),
23            }),
24            _ => Err(anyhow!("Only local slashlinks with slugs are supported")),
25        }
26    }
27}