use crate::config::Config;
use camino::Utf8PathBuf;
pub fn generate_relative(path_prefix: &Option<String>, file_name: &str) -> String {
let path = if let Some(prefix) = &path_prefix {
format!("{}/{}", prefix, file_name)
} else {
file_name.to_owned()
};
sanitize_path(&path, file_name)
}
pub fn generate_absolute(config: &Config, file_name: &str) -> Option<String> {
let url = "http://127.0.0.1:7979"; let url = url.trim_end_matches('/');
let path = if let Some(prefix) = &config.build.path_prefix {
format!("{}/{}", prefix, file_name)
} else {
file_name.to_owned()
};
let sanitized_path = sanitize_path(&path, file_name);
Some(format!("{}{}", url, sanitized_path))
}
fn sanitize_path(path: &str, file_name: &str) -> String {
let path = Utf8PathBuf::from(path);
let mut output = String::new();
for part in path.components() {
output.push('/');
output.extend(url::form_urlencoded::byte_serialize(
part.as_str().as_bytes(),
));
}
if file_name.ends_with('/') {
output.push('/');
}
output
}