mirror of
https://github.com/tuono-labs/tuono
synced 2026-07-29 13:52:46 -07:00
feat: pass reqwest client to handler
This commit is contained in:
@@ -25,6 +25,7 @@ use axum::response::Html;
|
|||||||
use axum::{routing::get, Router};
|
use axum::{routing::get, Router};
|
||||||
use tower_http::services::ServeDir;
|
use tower_http::services::ServeDir;
|
||||||
use tuono_lib::{ssr, Ssr};
|
use tuono_lib::{ssr, Ssr};
|
||||||
|
use reqwest::Client;
|
||||||
|
|
||||||
// MODULE_IMPORTS
|
// MODULE_IMPORTS
|
||||||
|
|
||||||
@@ -32,9 +33,12 @@ use tuono_lib::{ssr, Ssr};
|
|||||||
async fn main() {
|
async fn main() {
|
||||||
Ssr::create_platform();
|
Ssr::create_platform();
|
||||||
|
|
||||||
|
let fetch = Client::new();
|
||||||
|
|
||||||
let app = Router::new()
|
let app = Router::new()
|
||||||
// ROUTE_BUILDER
|
// 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();
|
let listener = tokio::net::TcpListener::bind("0.0.0.0:3000").await.unwrap();
|
||||||
axum::serve(listener, app).await.unwrap();
|
axum::serve(listener, app).await.unwrap();
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ use std::collections::HashMap;
|
|||||||
|
|
||||||
use axum::http::{HeaderMap, Uri};
|
use axum::http::{HeaderMap, Uri};
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug, Copy, Clone)]
|
||||||
pub struct Request<'a> {
|
pub struct Request<'a> {
|
||||||
uri: &'a Uri,
|
uri: &'a Uri,
|
||||||
headers: &'a HeaderMap,
|
headers: &'a HeaderMap,
|
||||||
|
|||||||
@@ -9,16 +9,18 @@ pub fn handler_core(_args: TokenStream, item: TokenStream) -> TokenStream {
|
|||||||
|
|
||||||
quote! {
|
quote! {
|
||||||
use axum::response::{Html, IntoResponse};
|
use axum::response::{Html, IntoResponse};
|
||||||
|
use axum::extract::State;
|
||||||
|
use reqwest::Client;
|
||||||
|
|
||||||
#item
|
#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 pathname = &request.uri();
|
||||||
let headers = &request.headers();
|
let headers = &request.headers();
|
||||||
|
|
||||||
let req = tuono_lib::Request::new(pathname, 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) => {
|
tuono_lib::Response::Props(val) => {
|
||||||
@@ -26,8 +28,6 @@ pub fn handler_core(_args: TokenStream, item: TokenStream) -> TokenStream {
|
|||||||
// TODO: remove unwrap
|
// TODO: remove unwrap
|
||||||
let payload = tuono_lib::Payload::new(&req, val).client_payload().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)))
|
tuono_lib::ssr::Js::SSR.with(|ssr| ssr.borrow_mut().render_to_string(Some(&payload)))
|
||||||
},
|
},
|
||||||
/// TODO: handle here redirection and rewrite
|
/// 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 pathname = &request.uri();
|
||||||
let headers = &request.headers();
|
let headers = &request.headers();
|
||||||
|
|
||||||
let req = tuono_lib::Request::new(pathname, 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) => return axum::Json(val).into_response(),
|
tuono_lib::Response::Props(val) => return axum::Json(val).into_response(),
|
||||||
|
|||||||
Reference in New Issue
Block a user