Which web framework to choose for rest & websockets

Have you actually tried it? The most recent app I've been working on using warp has something similar:

let app_name = warp::path("app_name");
let app_root = app_name.and(warp::path::end()).and(warp::fs::file("path/to/my/file.html");
let login = app_name.and(warp::path("login")).and(map || /* calling my handlebars template for logging in */);
let callback = app_name.and(.and(warp::path("callback"))
            .and(warp::filters::query::raw())
            .map(|code: String| AccessCode::from_query_str(&code))
            .map(|accesscode: AccessCode| {
                println!("{}", accesscode.to_string());
                OauthToken::from_access_code(accesscode)
            })
            .map(|resp: Result<reqwest::Response>| {
                let mut unwrapped = resp.unwrap();
                println!("{:?}", unwrapped);
                unwrapped.json::<OauthToken>()
            })
            .map(|token: Result<OauthToken>| {
                println!("token: {:?}", token);
                let id_token = &token.unwrap().id_token;
                println!("{:?}", alcoholic_jwt::token_kid(id_token));
                id_token.to_string()
            })
            .map(|token: String| {
                alcoholic_jwt::validate(&token,
                                        &jwk_by_kid(auth0_jwks(),
                                                    &alcoholic_jwt::token_kid(&token)
                                                         .unwrap()
                                                         .unwrap()),
                                        vec![])
                        .unwrap()
            })
            .map(|valid_jwt: ValidJWT| format!("jwt claims: {:?}", valid_jwt.claims));

let routes = app_root.or(login).or(callback);