feat: Add embed and noembed feature flags for HTTP assets/templates
This commit is contained in:
parent
dba07912d2
commit
1bbdb04dc9
5 changed files with 88 additions and 9 deletions
|
|
@ -65,10 +65,12 @@ impl DatabaseInterface for MemoryDatabase {
|
|||
self.create_user(new_user).await
|
||||
}
|
||||
|
||||
fn list_users(&self, domain: Option<String>) -> impl Future<Output = Result<Vec<User>, BoxedError>> {
|
||||
fn list_users(
|
||||
&self,
|
||||
domain: Option<String>,
|
||||
) -> impl Future<Output = Result<Vec<User>, BoxedError>> {
|
||||
let users = if let Some(domain) = domain {
|
||||
self
|
||||
.users
|
||||
self.users
|
||||
.iter()
|
||||
.filter(|user| user.domain.as_ref() == Some(&domain))
|
||||
.cloned()
|
||||
|
|
|
|||
|
|
@ -5,8 +5,13 @@ use axum::routing::{get, post};
|
|||
use axum::serve::Listener as AxumListener;
|
||||
use axum_extra::extract::cookie::CookieJar;
|
||||
use http::StatusCode;
|
||||
use minijinja::{Environment, context, path_loader};
|
||||
#[cfg(not(feature = "embed"))]
|
||||
use minijinja::path_loader;
|
||||
use minijinja::{Environment, context};
|
||||
#[cfg(feature = "embed")]
|
||||
use static_serve::embed_assets;
|
||||
#[cfg(not(feature = "embed"))]
|
||||
use tower_http::services::ServeDir;
|
||||
|
||||
use crate::db::{Database, DatabaseInterface, Operation};
|
||||
use crate::listener::{Listener, ListenerKind};
|
||||
|
|
@ -67,6 +72,9 @@ pub struct HttpState<D: DatabaseInterface> {
|
|||
impl<D: DatabaseInterface> HttpState<D> {
|
||||
pub fn new(db: Database<D>) -> Self {
|
||||
let mut templates = Environment::new();
|
||||
#[cfg(feature = "embed")]
|
||||
minijinja_embed::load_templates!(&mut templates);
|
||||
#[cfg(not(feature = "embed"))]
|
||||
templates.set_loader(path_loader("templates"));
|
||||
Self {
|
||||
db,
|
||||
|
|
@ -77,9 +85,19 @@ impl<D: DatabaseInterface> HttpState<D> {
|
|||
}
|
||||
|
||||
pub async fn http_listen<D: DatabaseInterface>(listener: Listener, db: Database<D>) {
|
||||
embed_assets!("assets");
|
||||
let app = Router::new()
|
||||
.nest("/assets", static_router())
|
||||
#[cfg(all(feature = "embed", feature = "noembed"))]
|
||||
compile_error!("You cannot have `embed` and `noembed` features enabled at the same time.");
|
||||
#[cfg(not(any(feature = "embed", feature = "noembed")))]
|
||||
compile_error!("You must have `embed` or `noembed` feature enabled.");
|
||||
|
||||
#[cfg(feature = "embed")]
|
||||
let app = {
|
||||
embed_assets!("assets");
|
||||
Router::new().nest("/assets", static_router())
|
||||
};
|
||||
#[cfg(not(feature = "embed"))]
|
||||
let app = { Router::new().nest_service("/assets", ServeDir::new("assets")) };
|
||||
let app = app
|
||||
.route("/", get(home))
|
||||
.route("/login", get(home))
|
||||
.route("/login", post(login::post_login))
|
||||
|
|
|
|||
Loading…
Reference in a new issue