feat: pass reqwest client to handler

This commit is contained in:
Valerio Ageno
2024-05-30 21:03:25 +02:00
parent 930e7bc851
commit 00594b7c3a
3 changed files with 13 additions and 9 deletions
@@ -25,6 +25,7 @@ use axum::response::Html;
use axum::{routing::get, Router};
use tower_http::services::ServeDir;
use tuono_lib::{ssr, Ssr};
use reqwest::Client;
// MODULE_IMPORTS
@@ -32,9 +33,12 @@ use tuono_lib::{ssr, Ssr};
async fn main() {
Ssr::create_platform();
let fetch = Client::new();
let app = Router::new()
// ROUTE_BUILDER
.fallback_service(ServeDir::new("public").fallback(get(catch_all)));
.fallback_service(ServeDir::new("public").fallback(get(catch_all)))
.with_state(fetch);
let listener = tokio::net::TcpListener::bind("0.0.0.0:3000").await.unwrap();
axum::serve(listener, app).await.unwrap();
+1 -1
View File
@@ -3,7 +3,7 @@ use std::collections::HashMap;
use axum::http::{HeaderMap, Uri};
#[derive(Debug)]
#[derive(Debug, Copy, Clone)]
pub struct Request<'a> {
uri: &'a Uri,
headers: &'a HeaderMap,
+7 -7
View File
@@ -9,25 +9,25 @@ pub fn handler_core(_args: TokenStream, item: TokenStream) -> TokenStream {
quote! {
use axum::response::{Html, IntoResponse};
use axum::extract::State;
use reqwest::Client;
#item
pub async fn route(request: axum::extract::Request) -> Html<String> {
pub async fn route(State(client): State<Client>, request: axum::extract::Request) -> Html<String> {
let pathname = &request.uri();
let headers = &request.headers();
let req = tuono_lib::Request::new(pathname, headers);
let local_response = #fn_name(&req);
let local_response = #fn_name(req.clone(), client).await;
let res = match local_response{
let res = match local_response {
tuono_lib::Response::Props(val) => {
// TODO: remove unwrap
let payload = tuono_lib::Payload::new(&req, val).client_payload().unwrap();
dbg!(&payload);
tuono_lib::ssr::Js::SSR.with(|ssr| ssr.borrow_mut().render_to_string(Some(&payload)))
},
/// TODO: handle here redirection and rewrite
@@ -40,13 +40,13 @@ pub fn handler_core(_args: TokenStream, item: TokenStream) -> TokenStream {
}
}
pub async fn api(request: axum::extract::Request) -> axum::response::Response {
pub async fn api(State(client): State<Client>, request: axum::extract::Request) -> axum::response::Response {
let pathname = &request.uri();
let headers = &request.headers();
let req = tuono_lib::Request::new(pathname, headers);
let local_response = #fn_name(&req);
let local_response = #fn_name(req.clone(), client).await;
let res = match local_response{
tuono_lib::Response::Props(val) => return axum::Json(val).into_response(),