1Merge two routers into one. 2 3This is useful for breaking apps into smaller pieces and combining them 4into one. 5 6```rust 7use axum::{ 8 routing::get, 9 Router, 10}; 11# 12# async fn users_list() {} 13# async fn users_show() {} 14# async fn teams_list() {} 15 16// define some routes separately 17let user_routes = Router::new() 18 .route("/users", get(users_list)) 19 .route("/users/:id", get(users_show)); 20 21let team_routes = Router::new() 22 .route("/teams", get(teams_list)); 23 24// combine them into one 25let app = Router::new() 26 .merge(user_routes) 27 .merge(team_routes); 28 29// could also do `user_routes.merge(team_routes)` 30 31// Our app now accepts 32// - GET /users 33// - GET /users/:id 34// - GET /teams 35# async { 36# hyper::Server::bind(&"".parse().unwrap()).serve(app.into_make_service()).await.unwrap(); 37# }; 38``` 39 40# Merging routers with state 41 42When combining [`Router`]s with this method, each [`Router`] must have the 43same type of state. If your routers have different types you can use 44[`Router::with_state`] to provide the state and make the types match: 45 46```rust 47use axum::{ 48 Router, 49 routing::get, 50 extract::State, 51}; 52 53#[derive(Clone)] 54struct InnerState {} 55 56#[derive(Clone)] 57struct OuterState {} 58 59async fn inner_handler(state: State<InnerState>) {} 60 61let inner_router = Router::new() 62 .route("/bar", get(inner_handler)) 63 .with_state(InnerState {}); 64 65async fn outer_handler(state: State<OuterState>) {} 66 67let app = Router::new() 68 .route("/", get(outer_handler)) 69 .merge(inner_router) 70 .with_state(OuterState {}); 71# let _: axum::Router = app; 72``` 73 74# Panics 75 76- If two routers that each have a [fallback](Router::fallback) are merged. This 77 is because `Router` only allows a single fallback. 78