rjango 0.1.1

A full-stack Rust backend framework inspired by Django
Documentation
use crate::urls::resolvers::{URLPattern, join_routes, normalize_route};

#[must_use]
pub fn path(route: &str, name: Option<&str>) -> URLPattern {
    URLPattern {
        name: name.map(str::to_owned),
        route: normalize_route(route),
        view_name: String::new(),
    }
}

#[must_use]
pub fn include(prefix: &str, patterns: Vec<URLPattern>) -> Vec<URLPattern> {
    patterns
        .into_iter()
        .map(|mut pattern| {
            pattern.route = join_routes(prefix, &pattern.route);
            pattern
        })
        .collect()
}

#[cfg(test)]
mod tests {
    use super::{include, path};

    #[test]
    fn path_creates_named_patterns() {
        let pattern = path("/users/<int:id>", Some("user-detail"));

        assert_eq!(pattern.route, "/users/<int:id>");
        assert_eq!(pattern.name.as_deref(), Some("user-detail"));
        assert!(pattern.view_name.is_empty());
    }

    #[test]
    fn include_prefixes_nested_patterns() {
        let nested = vec![
            path("/", Some("api-index")),
            path("/users/<int:id>", Some("user-detail")),
        ];

        let included = include("/api/", nested);

        assert_eq!(included[0].route, "/api/");
        assert_eq!(included[1].route, "/api/users/<int:id>");
        assert_eq!(included[1].name.as_deref(), Some("user-detail"));
    }
}