feat: use the correct public folder according to the mode

This commit is contained in:
Valerio Ageno
2024-06-25 18:48:55 +02:00
parent 0c93aab13f
commit 3ca8861d85
+26 -4
View File
@@ -73,10 +73,7 @@ async fn main() {
let app = Router::new()
// ROUTE_BUILDER
.fallback_service(
ServeDir::new("public"))
.fallback_service(ServeDir::new("out/client")
.fallback(get(catch_all)))
.fallback_service(ServeDir::new("/*public_dir*/").fallback(get(catch_all)))
.with_state(fetch);
let listener = tokio::net::TcpListener::bind("0.0.0.0:3000").await.unwrap();
@@ -112,6 +109,8 @@ async fn catch_all(Path(params): Path<HashMap<String, String>>, request: Request
const ROOT_FOLDER: &str = "src/routes";
const DEV_FOLDER: &str = ".tuono";
const DEV_PUBLIC_DIR: &str = "public";
const PROD_PUBLIC_DIR: &str = "out/client";
#[derive(Debug, PartialEq, Eq)]
struct Route {
@@ -255,6 +254,12 @@ pub fn bundle_axum_source(mode: Mode) -> io::Result<()> {
}
fn generate_axum_source(source_builder: &SourceBuilder, mode: Mode) -> String {
let public_dir = if mode == Mode::Prod {
PROD_PUBLIC_DIR
} else {
DEV_PUBLIC_DIR
};
AXUM_ENTRY_POINT
.replace(
"// ROUTE_BUILDER\n",
@@ -264,6 +269,7 @@ fn generate_axum_source(source_builder: &SourceBuilder, mode: Mode) -> String {
"// MODULE_IMPORTS\n",
&create_modules_declaration(&source_builder.route_map),
)
.replace("/*public_dir*/", public_dir)
.replace("/*MODE*/", mode.as_str())
}
@@ -404,4 +410,20 @@ mod tests {
assert_eq!(dev, "Mode::Dev");
assert_eq!(prod, "Mode::Prod");
}
#[test]
fn should_replace_the_correct_public_folder_dev() {
let source_builder = SourceBuilder::new();
let source = generate_axum_source(&source_builder, Mode::Dev);
assert!(source.contains(r#"ServeDir::new("public")"#))
}
#[test]
fn should_replace_the_correct_public_folder_prod() {
let source_builder = SourceBuilder::new();
let source = generate_axum_source(&source_builder, Mode::Prod);
assert!(source.contains(r#"ServeDir::new("out/client")"#))
}
}