summaryrefslogtreecommitdiffstats
path: root/third_party/rust/warp/examples/autoreload.rs
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 19:33:14 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 19:33:14 +0000
commit36d22d82aa202bb199967e9512281e9a53db42c9 (patch)
tree105e8c98ddea1c1e4784a60a5a6410fa416be2de /third_party/rust/warp/examples/autoreload.rs
parentInitial commit. (diff)
downloadfirefox-esr-36d22d82aa202bb199967e9512281e9a53db42c9.tar.xz
firefox-esr-36d22d82aa202bb199967e9512281e9a53db42c9.zip
Adding upstream version 115.7.0esr.upstream/115.7.0esrupstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'third_party/rust/warp/examples/autoreload.rs')
-rw-r--r--third_party/rust/warp/examples/autoreload.rs42
1 files changed, 42 insertions, 0 deletions
diff --git a/third_party/rust/warp/examples/autoreload.rs b/third_party/rust/warp/examples/autoreload.rs
new file mode 100644
index 0000000000..a21d9b1369
--- /dev/null
+++ b/third_party/rust/warp/examples/autoreload.rs
@@ -0,0 +1,42 @@
+#![deny(warnings)]
+use hyper::server::Server;
+use listenfd::ListenFd;
+use std::convert::Infallible;
+use warp::Filter;
+
+/// You'll need to install `systemfd` and `cargo-watch`:
+/// ```
+/// cargo install systemfd cargo-watch
+/// ```
+/// And run with:
+/// ```
+/// systemfd --no-pid -s http::3030 -- cargo watch -x 'run --example autoreload'
+/// ```
+#[tokio::main]
+async fn main() {
+ // Match any request and return hello world!
+ let routes = warp::any().map(|| "Hello, World!");
+
+ // hyper let's us build a server from a TcpListener (which will be
+ // useful shortly). Thus, we'll need to convert our `warp::Filter` into
+ // a `hyper::service::MakeService` for use with a `hyper::server::Server`.
+ let svc = warp::service(routes);
+
+ let make_svc = hyper::service::make_service_fn(|_: _| {
+ // the clone is there because not all warp filters impl Copy
+ let svc = svc.clone();
+ async move { Ok::<_, Infallible>(svc) }
+ });
+
+ let mut listenfd = ListenFd::from_env();
+ // if listenfd doesn't take a TcpListener (i.e. we're not running via
+ // the command above), we fall back to explicitly binding to a given
+ // host:port.
+ let server = if let Some(l) = listenfd.take_tcp_listener(0).unwrap() {
+ Server::from_tcp(l).unwrap()
+ } else {
+ Server::bind(&([127, 0, 0, 1], 3030).into())
+ };
+
+ server.serve(make_svc).await.unwrap();
+}