More robust asset paths in examples (#1090)

* More robust asset paths in examples

* Update examples/low-level-rustls/src/main.rs

Co-authored-by: Jonas Platte <[email protected]>

* format

Co-authored-by: Jonas Platte <[email protected]>
This commit is contained in:
David Pedersen
2022-06-15 22:42:49 +02:00
committed by GitHub
co-authored by Jonas Platte
parent cbb2e8a244
commit fd70f81c46
4 changed files with 39 additions and 19 deletions
+15 -4
View File
@@ -11,7 +11,14 @@ use hyper::server::{
conn::{AddrIncoming, Http}, conn::{AddrIncoming, Http},
}; };
use rustls_pemfile::{certs, pkcs8_private_keys}; use rustls_pemfile::{certs, pkcs8_private_keys};
use std::{fs::File, io::BufReader, net::SocketAddr, pin::Pin, sync::Arc}; use std::{
fs::File,
io::BufReader,
net::SocketAddr,
path::{Path, PathBuf},
pin::Pin,
sync::Arc,
};
use tokio::net::TcpListener; use tokio::net::TcpListener;
use tokio_rustls::{ use tokio_rustls::{
rustls::{Certificate, PrivateKey, ServerConfig}, rustls::{Certificate, PrivateKey, ServerConfig},
@@ -30,8 +37,12 @@ async fn main() {
.init(); .init();
let rustls_config = rustls_server_config( let rustls_config = rustls_server_config(
"examples/tls-rustls/self_signed_certs/key.pem", PathBuf::from(env!("CARGO_MANIFEST_DIR"))
"examples/tls-rustls/self_signed_certs/cert.pem", .join("self_signed_certs")
.join("key.pem"),
PathBuf::from(env!("CARGO_MANIFEST_DIR"))
.join("self_signed_certs")
.join("cert.pem"),
); );
let acceptor = TlsAcceptor::from(rustls_config); let acceptor = TlsAcceptor::from(rustls_config);
@@ -65,7 +76,7 @@ async fn handler(ConnectInfo(addr): ConnectInfo<SocketAddr>) -> String {
addr.to_string() addr.to_string()
} }
fn rustls_server_config(key: &str, cert: &str) -> Arc<ServerConfig> { fn rustls_server_config(key: impl AsRef<Path>, cert: impl AsRef<Path>) -> Arc<ServerConfig> {
let mut key_reader = BufReader::new(File::open(key).unwrap()); let mut key_reader = BufReader::new(File::open(key).unwrap());
let mut cert_reader = BufReader::new(File::open(cert).unwrap()); let mut cert_reader = BufReader::new(File::open(cert).unwrap());
+13 -10
View File
@@ -12,7 +12,7 @@ use axum::{
Router, Router,
}; };
use futures::stream::{self, Stream}; use futures::stream::{self, Stream};
use std::{convert::Infallible, net::SocketAddr, time::Duration}; use std::{convert::Infallible, net::SocketAddr, path::PathBuf, time::Duration};
use tokio_stream::StreamExt as _; use tokio_stream::StreamExt as _;
use tower_http::{services::ServeDir, trace::TraceLayer}; use tower_http::{services::ServeDir, trace::TraceLayer};
use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt}; use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt};
@@ -27,14 +27,17 @@ async fn main() {
.with(tracing_subscriber::fmt::layer()) .with(tracing_subscriber::fmt::layer())
.init(); .init();
let static_files_service = let assets_dir = PathBuf::from(env!("CARGO_MANIFEST_DIR")).join("assets");
get_service(ServeDir::new("examples/sse/assets").append_index_html_on_directories(true))
.handle_error(|error: std::io::Error| async move { let static_files_service = get_service(
( ServeDir::new(assets_dir).append_index_html_on_directories(true),
StatusCode::INTERNAL_SERVER_ERROR, )
format!("Unhandled internal error: {}", error), .handle_error(|error: std::io::Error| async move {
) (
}); StatusCode::INTERNAL_SERVER_ERROR,
format!("Unhandled internal error: {}", error),
)
});
// build our application with a route // build our application with a route
let app = Router::new() let app = Router::new()
@@ -59,7 +62,7 @@ async fn sse_handler(
// A `Stream` that repeats an event every second // A `Stream` that repeats an event every second
let stream = stream::repeat_with(|| Event::default().data("hi!")) let stream = stream::repeat_with(|| Event::default().data("hi!"))
.map(Ok) .map(Ok)
.throttle(Duration::from_secs(10)); .throttle(Duration::from_secs(1));
Sse::new(stream).keep_alive( Sse::new(stream).keep_alive(
axum::response::sse::KeepAlive::new() axum::response::sse::KeepAlive::new()
+7 -3
View File
@@ -6,7 +6,7 @@
use axum::{routing::get, Router}; use axum::{routing::get, Router};
use axum_server::tls_rustls::RustlsConfig; use axum_server::tls_rustls::RustlsConfig;
use std::net::SocketAddr; use std::{net::SocketAddr, path::PathBuf};
use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt}; use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt};
#[tokio::main] #[tokio::main]
@@ -19,8 +19,12 @@ async fn main() {
.init(); .init();
let config = RustlsConfig::from_pem_file( let config = RustlsConfig::from_pem_file(
"examples/tls-rustls/self_signed_certs/cert.pem", PathBuf::from(env!("CARGO_MANIFEST_DIR"))
"examples/tls-rustls/self_signed_certs/key.pem", .join("self_signed_certs")
.join("cert.pem"),
PathBuf::from(env!("CARGO_MANIFEST_DIR"))
.join("self_signed_certs")
.join("key.pem"),
) )
.await .await
.unwrap(); .unwrap();
+4 -2
View File
@@ -16,7 +16,7 @@ use axum::{
routing::{get, get_service}, routing::{get, get_service},
Router, Router,
}; };
use std::net::SocketAddr; use std::{net::SocketAddr, path::PathBuf};
use tower_http::{ use tower_http::{
services::ServeDir, services::ServeDir,
trace::{DefaultMakeSpan, TraceLayer}, trace::{DefaultMakeSpan, TraceLayer},
@@ -32,7 +32,9 @@ async fn main() {
)) ))
.with(tracing_subscriber::fmt::layer()) .with(tracing_subscriber::fmt::layer())
.init(); .init();
let assets_dir = std::path::PathBuf::from(env!("CARGO_MANIFEST_DIR")).join("assets");
let assets_dir = PathBuf::from(env!("CARGO_MANIFEST_DIR")).join("assets");
// build our application with some routes // build our application with some routes
let app = Router::new() let app = Router::new()
.fallback( .fallback(