about summary refs log tree commit diff
path: root/kittybox-rs/templates/build.rs
diff options
context:
space:
mode:
authorVika <vika@fireburn.ru>2022-10-07 19:53:04 +0300
committerVika <vika@fireburn.ru>2022-10-07 19:53:04 +0300
commit9f7b903901acb0cd6ec9cb2146406a92ebf79cab (patch)
treec7a45f69d2d59621365494dc2d3657848390b61d /kittybox-rs/templates/build.rs
parent6cb479acc61ab19f655cedd878283b214e352a3d (diff)
templates: move static assets to the templates crate
It makes more sense to keep CSS near the templates, and the
client-side JavaScript code too, since it depends on the DOM structure
to work. Additionally, the overhead of `include_dir!()` is almost
completely mitigated by the fact that this is a separate crate that
isn't recompiled often.

The linking stage, however, is still expected to take a little bit
long. But I doubt it'd be longer than what it was before, since it's
the same exact files that get linked into the app.
Diffstat (limited to 'kittybox-rs/templates/build.rs')
-rw-r--r--kittybox-rs/templates/build.rs26
1 files changed, 26 insertions, 0 deletions
diff --git a/kittybox-rs/templates/build.rs b/kittybox-rs/templates/build.rs
new file mode 100644
index 0000000..1140060
--- /dev/null
+++ b/kittybox-rs/templates/build.rs
@@ -0,0 +1,26 @@
+fn main() {
+    use std::env;
+    let out_dir = std::path::PathBuf::from(env::var("OUT_DIR").unwrap());
+    println!("cargo:rerun-if-changed=assets/");
+    let assets = std::fs::read_dir("assets").unwrap();
+    for file in assets.map(|a| a.unwrap()) {
+        std::fs::copy(
+            file.path(),
+            out_dir.join(file.file_name())
+        )
+            .unwrap();
+    }
+    println!("cargo::rerun-if-changed=javascript/");
+    if let Ok(exit) = std::process::Command::new("tsc")
+        .arg("--outDir")
+        .arg(&out_dir)
+        .current_dir("javascript")
+        .spawn()
+        .unwrap()
+        .wait()
+    {
+        if !exit.success() {
+            std::process::exit(exit.code().unwrap_or(1))
+        }
+    }
+}