summaryrefslogtreecommitdiff
path: root/server
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2023-06-24 23:50:22 +0200
committermetamuffin <metamuffin@disroot.org>2023-06-24 23:50:22 +0200
commitb408b2ebcafddde5a93a3f708d815fcf740607fb (patch)
tree562ff7b45aa973ef91f7d9ba22f3c4e8dc957363 /server
parentbdbb7c8b092e2e59d36ad7e979fbe9ac0a2fcff1 (diff)
downloadkeks-meet-b408b2ebcafddde5a93a3f708d815fcf740607fb.tar
keks-meet-b408b2ebcafddde5a93a3f708d815fcf740607fb.tar.bz2
keks-meet-b408b2ebcafddde5a93a3f708d815fcf740607fb.tar.zst
embed sass without debug_assertions
Diffstat (limited to 'server')
-rw-r--r--server/src/assets.rs69
-rw-r--r--server/src/main.rs5
2 files changed, 64 insertions, 10 deletions
diff --git a/server/src/assets.rs b/server/src/assets.rs
index 6047164..d6e94a2 100644
--- a/server/src/assets.rs
+++ b/server/src/assets.rs
@@ -1,7 +1,5 @@
-use std::fs::read_to_string;
-
-use grass::StdFs;
use log::error;
+use std::sync::LazyLock;
#[cfg(debug_assertions)]
#[macro_export]
@@ -55,13 +53,68 @@ macro_rules! s_asset_dir {
}};
}
-pub fn css_bundle() -> String {
- grass::from_string(
- read_to_string("../client-web/style/master.sass").unwrap(),
+#[derive(Debug)]
+struct GrassFs;
+#[cfg(debug_assertions)]
+impl GrassFs {
+ pub fn map(p: &std::path::Path) -> std::path::PathBuf {
+ std::path::PathBuf::try_from("../client-web/style")
+ .unwrap()
+ .join(p.file_name().unwrap())
+ }
+}
+#[cfg(debug_assertions)]
+impl grass::Fs for GrassFs {
+ fn is_dir(&self, path: &std::path::Path) -> bool {
+ Self::map(path).is_dir()
+ }
+ fn is_file(&self, path: &std::path::Path) -> bool {
+ Self::map(path).is_file()
+ }
+ fn read(&self, path: &std::path::Path) -> std::io::Result<Vec<u8>> {
+ std::fs::read(Self::map(path))
+ }
+}
+
+#[cfg(not(debug_assertions))]
+const STYLE_DIR: include_dir::Dir =
+ include_dir::include_dir!("$CARGO_MANIFEST_DIR/../client-web/style");
+#[cfg(not(debug_assertions))]
+impl grass::Fs for GrassFs {
+ fn is_dir(&self, _path: &std::path::Path) -> bool {
+ false
+ }
+ fn is_file(&self, path: &std::path::Path) -> bool {
+ STYLE_DIR.get_file(path.file_name().unwrap()).is_some()
+ }
+ fn read(&self, path: &std::path::Path) -> std::io::Result<Vec<u8>> {
+ Ok(STYLE_DIR
+ .get_file(path.file_name().unwrap())
+ .ok_or(std::io::Error::new(
+ std::io::ErrorKind::NotFound,
+ "not found",
+ ))?
+ .contents()
+ .to_vec())
+ }
+}
+
+static CSS_BUNDLE: LazyLock<String> = LazyLock::new(css_bundle);
+
+pub fn css() -> String {
+ if cfg!(debug_assertions) {
+ css_bundle()
+ } else {
+ CSS_BUNDLE.clone()
+ }
+}
+fn css_bundle() -> String {
+ grass::from_path(
+ "/master.sass",
&grass::Options::default()
.input_syntax(grass::InputSyntax::Sass)
- .load_path("../client-web/style")
- .fs(&StdFs),
+ .load_path("/")
+ .fs(&GrassFs),
)
.unwrap_or_else(|err| {
error!("sass compile failed: {err}");
diff --git a/server/src/main.rs b/server/src/main.rs
index 431d668..57ec4df 100644
--- a/server/src/main.rs
+++ b/server/src/main.rs
@@ -3,12 +3,13 @@
which is licensed under the GNU Affero General Public License (version 3); see /COPYING.
Copyright (C) 2022 metamuffin <metamuffin@disroot.org>
*/
+#![feature(lazy_cell)]
pub mod assets;
pub mod config;
pub mod protocol;
pub mod room;
-use assets::css_bundle;
+use assets::css;
use config::{ClientAppearanceConfig, ClientConfig};
use hyper::{header, StatusCode};
use listenfd::ListenFd;
@@ -70,7 +71,7 @@ async fn run() {
warp::reply::with_header(client_config_css.clone(), "content-type", "text/css")
});
let css: _ = warp::path!("style.css")
- .map(move || warp::reply::with_header(css_bundle(), "content-type", "text/css"));
+ .map(move || warp::reply::with_header(css(), "content-type", "text/css"));
let favicon: _ = warp::path!("favicon.ico").map(|| "");
let old_format_redirect: _ = warp::path!("room" / String).map(|rsecret| {
reply::with_header(