diff --git a/examples/versioning.rs b/examples/versioning.rs new file mode 100644 index 00000000..a80b714c --- /dev/null +++ b/examples/versioning.rs @@ -0,0 +1,51 @@ +use awebframework::response::IntoResponse; +use awebframework::{async_trait, extract::FromRequest, prelude::*}; +use http::Response; +use http::StatusCode; +use std::net::SocketAddr; + +#[tokio::main] +async fn main() { + tracing_subscriber::fmt::init(); + + // build our application with some routes + let app = route("/:version/foo", get(handler)); + + // run it + let addr = SocketAddr::from(([127, 0, 0, 1], 3000)); + tracing::debug!("listening on {}", addr); + app.serve(&addr).await.unwrap(); +} + +async fn handler(version: Version) { + println!("received request with version {:?}", version); +} + +#[derive(Debug)] +enum Version { + V1, + V2, + V3, +} + +#[async_trait] +impl FromRequest for Version { + type Rejection = Response
; + + async fn from_request(req: &mut Request) -> Result