Routing


Sturdy supports dynamic routing and multi route variable segments.

 

Registering routes


Your routes will be registered in src/routes.rs.

use sturdy::routing::{Router, Route};

fn register_routes(router: Router) {
    router.get("/", LandingPage);
    router.get("/about", AboutPage);
    
    // Or...
    router.get("/", Page("Landing Title", "Landing Description", "landing.html"));
    router.get("/about", Page("About Title", "About Description", "about.html"));
}

 

Route Variables


You may register route variables for dynamic route matching.

router.get("/user/{user}", ShowUser);

In your Action's handle method:

// Request: /user/123
let user_id = request.var("user").unwrap();

// user_id = "123"
dbg!(user_id);

 

Route Variable Constraints


You may restrict route variable matches using a regex pattern.

// Use method `getm()` (for get & modify) instead of `get()`
router.getm(
    "/user/{username}",
    ShowUser,
    |route: Route| {
        // path /user/johndoe will hit
        // path /user/123 will not
        route.constrain("username", "[a-zA-Z]+")
    }
);

 

Multi Variable Segments


You may have multiple tokens per segment.

router.getm(
    "/post/{author}.{post_id}.{post_slug}",
    ShowPost,
    |route| {
        // matches /post/janedoe.456.how-to-do-thing
        route.constrain("author", "^[a-zA-Z]+")
            .constrain("post_id", "[0-9]+")
            .constrain("post_slug", "[a-zA-Z0-9-]+$")
    });

 

Next steps: