Skip to content

Commit

Permalink
Add example of static-file-server using serve dir with handler as ser…
Browse files Browse the repository at this point in the history
…vice (#1501)

* add example of static-file-seriver using serve dit with handler as service

* update handle return type in example

Co-authored-by: David Pedersen <david.pdrsn@gmail.com>

* cargo fmt fix

* change error mapping

Co-authored-by: David Pedersen <david.pdrsn@gmail.com>
  • Loading branch information
SET001 and davidpdrsn committed Nov 8, 2022
1 parent 944f388 commit 8d6313a
Showing 1 changed file with 22 additions and 2 deletions.
24 changes: 22 additions & 2 deletions examples/static-file-server/src/main.rs
Expand Up @@ -6,6 +6,7 @@

use axum::{
body::Body,
handler::HandlerWithoutStateExt,
http::{Request, StatusCode},
response::IntoResponse,
routing::{get, get_service},
Expand Down Expand Up @@ -35,8 +36,9 @@ async fn main() {
serve(using_serve_dir(), 3001),
serve(using_serve_dir_with_assets_fallback(), 3002),
serve(using_serve_dir_only_from_root_via_fallback(), 3003),
serve(two_serve_dirs(), 3004),
serve(calling_serve_dir_from_a_handler(), 3005),
serve(using_serve_dir_with_handler_as_service(), 3004),
serve(two_serve_dirs(), 3005),
serve(calling_serve_dir_from_a_handler(), 3006),
);
}

Expand Down Expand Up @@ -86,6 +88,24 @@ fn using_serve_dir_only_from_root_via_fallback() -> Router {
.fallback_service(serve_dir)
}

fn using_serve_dir_with_handler_as_service() -> Router {
async fn handle_404() -> (StatusCode, &'static str) {
(StatusCode::NOT_FOUND, "Not found")
}

// you can convert handler function to service
let service = handle_404
.into_service()
.map_err(|err| -> std::io::Error { match err {} });

let serve_dir = ServeDir::new("assets").not_found_service(service);
let serve_dir = get_service(serve_dir).handle_error(handle_error);

Router::new()
.route("/foo", get(|| async { "Hi from /foo" }))
.fallback_service(serve_dir)
}

fn two_serve_dirs() -> Router {
// you can also have two `ServeDir`s nested at different paths
let serve_dir_from_assets = get_service(ServeDir::new("assets")).handle_error(handle_error);
Expand Down

0 comments on commit 8d6313a

Please sign in to comment.