aiagentskills-site-kit 0.1.0

Small metadata and URL helpers for AI Agent Skills, a curated Claude, Codex, and AI agent skills directory.
Documentation
pub const BASE_URL: &str = "https://aiagentskills.net";

fn clean_slug(slug: &str) -> String {
    slug.trim().trim_matches('/').to_string()
}

pub fn url_for(path: &str) -> String {
    let clean = clean_slug(path);
    if clean.is_empty() { BASE_URL.to_string() } else { format!("{}/{}/", BASE_URL, clean) }
}

pub fn home_url() -> &'static str { BASE_URL }
pub fn skills_url() -> String { url_for("skills") }
pub fn submit_url() -> String { url_for("submit") }
pub fn blog_url() -> String { url_for("blog") }
pub fn category_url(slug: &str) -> String { url_for(&format!("category/{}", clean_slug(slug))) }
pub fn skill_url(slug: &str) -> String { url_for(&format!("skill/{}", clean_slug(slug))) }
pub fn search_url(query: &str) -> String {
    let value = query.trim().replace(' ', "%20");
    if value.is_empty() { skills_url() } else { format!("{}/skills/?q={}", BASE_URL, value) }
}

#[cfg(test)]
mod tests {
    use super::*;
    #[test]
    fn builds_links() {
        assert_eq!(home_url(), "https://aiagentskills.net");
        assert_eq!(skills_url(), "https://aiagentskills.net/skills/");
        assert_eq!(submit_url(), "https://aiagentskills.net/submit/");
        assert_eq!(blog_url(), "https://aiagentskills.net/blog/");
        assert_eq!(category_url("agent-workflows"), "https://aiagentskills.net/category/agent-workflows/");
        assert_eq!(skill_url("seo-article-writer"), "https://aiagentskills.net/skill/seo-article-writer/");
        assert_eq!(search_url("codex skills"), "https://aiagentskills.net/skills/?q=codex%20skills");
    }
}