use std::borrow::Cow;
use anyhow::Context;
use crate::webserver::database::sqlpage_functions::url_parameters::URLParameters;
pub(super) async fn link<'a>(
file: Cow<'a, str>,
parameters: Option<Cow<'a, str>>,
hash: Option<Cow<'a, str>>,
) -> anyhow::Result<String> {
let mut url = file.into_owned();
if let Some(parameters) = parameters {
let encoded = serde_json::from_str::<URLParameters>(¶meters)
.with_context(|| format!("sqlpage.link: {parameters:?} is not a valid JSON object. The URL parameters should be passed as a json object with parameter names as keys."))?;
encoded.append_to_path(&mut url);
}
if let Some(hash) = hash {
url.push('#');
url.push_str(&hash);
}
Ok(url)
}