use axum::{routing::get, Router};
use demo_server::{api::demo_server::DemoServer, MyGreeter};
use std::time::Duration;
use tonic::transport::Server;
use tower_http::{cors::CorsLayer, timeout::TimeoutLayer};
#[tokio::main]
async fn main() {
let cors_layer = CorsLayer::new();
let time_layer = TimeoutLayer::new(Duration::from_secs(5));
let layer = tower::ServiceBuilder::new()
.layer(cors_layer)
.layer(time_layer)
.into_inner();
let g_lay = layer.clone();
tokio::spawn(async move {
run_grpc(layer).await;
});
tokio::spawn(async move {
run_http(g_lay).await;
});
tokio::select! {
_ = tokio::signal::ctrl_c() => {},
}
}
async fn run_grpc<T>(layer: T)
where
T: Clone + Send,
{
let addr = "[::1]:50051".parse().unwrap();
println!("grpc listening on {}", addr);
let greeter = MyGreeter::default();
let svc = DemoServer::new(greeter);
Server::builder()
.layer(layer)
.add_service(svc)
.serve(addr)
.await
.unwrap();
}
async fn run_http<T>(layer: T)
where
T: Clone + Send + Sync,
{
let app = Router::new().layer(layer).route(
"/",
get(|| async {
println!("------sdfs----");
}),
);
let listener = tokio::net::TcpListener::bind("0.0.0.0:3000").await.unwrap();
axum::serve(listener, app).await.unwrap();
}
In main, how do I transfer the layer to the run_grpc and run_http functions