summaryrefslogtreecommitdiffstats
path: root/third_party/rust/warp/examples/headers.rs
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/rust/warp/examples/headers.rs')
-rw-r--r--third_party/rust/warp/examples/headers.rs27
1 files changed, 27 insertions, 0 deletions
diff --git a/third_party/rust/warp/examples/headers.rs b/third_party/rust/warp/examples/headers.rs
new file mode 100644
index 0000000000..2b3dca7b50
--- /dev/null
+++ b/third_party/rust/warp/examples/headers.rs
@@ -0,0 +1,27 @@
+#![deny(warnings)]
+use std::net::SocketAddr;
+use warp::Filter;
+
+/// Create a server that requires header conditions:
+///
+/// - `Host` is a `SocketAddr`
+/// - `Accept` is exactly `*/*`
+///
+/// If these conditions don't match, a 404 is returned.
+#[tokio::main]
+async fn main() {
+ pretty_env_logger::init();
+
+ // For this example, we assume no DNS was used,
+ // so the Host header should be an address.
+ let host = warp::header::<SocketAddr>("host");
+
+ // Match when we get `accept: */*` exactly.
+ let accept_stars = warp::header::exact("accept", "*/*");
+
+ let routes = host
+ .and(accept_stars)
+ .map(|addr| format!("accepting stars on {}", addr));
+
+ warp::serve(routes).run(([127, 0, 0, 1], 3030)).await;
+}