diff --git a/Cargo.lock b/Cargo.lock index 531ef91..081dab1 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1839,6 +1839,7 @@ dependencies = [ "minijinja-autoreload", "once_cell", "pulldown-cmark", + "rear", "rust-embed", "sea-orm", "serde", @@ -2371,6 +2372,35 @@ dependencies = [ "getrandom", ] +[[package]] +name = "rear" +version = "0.1.0" +dependencies = [ + "anyhow", + "async-trait", + "axum 0.7.4", + "barrel", + "derive_builder", + "dotenvy", + "dunce", + "env_logger", + "log", + "mime_guess", + "minijinja", + "minijinja-autoreload", + "once_cell", + "pulldown-cmark", + "rust-embed", + "sea-orm", + "serde", + "serde_json", + "slug", + "sqlformat", + "tokio", + "tower-http", + "tracing", +] + [[package]] name = "redox_syscall" version = "0.3.5" diff --git a/Cargo.toml b/Cargo.toml index 22cca55..bccec32 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -9,7 +9,7 @@ default-run = "miniweb" [workspace] -members = [".", "entity", "migration"] +members = [".", "entity", "migration", "rear"] [features] # https://github.com/rust-db/barrel/blob/master/guides/diesel-setup.md @@ -19,6 +19,7 @@ default = ["use_barrel"] [dependencies] strinto = { path = "./strinto" } entity = { path = "./entity" } +rear = { path = "./rear" } sea-orm = { version = "0.12.10", features = [ "runtime-tokio-native-tls", "sqlx-postgres", diff --git a/NOTES.md b/NOTES.md index 2644699..cf215a6 100644 --- a/NOTES.md +++ b/NOTES.md @@ -263,3 +263,18 @@ Make axum log requests! There is another crate, that uses some MIME detection middleware for cache-control, called axum-cc, which could inspire middlewares here. +## Changing Rust Toolchain on Windows + +change to GNU: + +`rustup toolchain install stable-x86_64-pc-windows-gnu` + +change back to MSVC: + +`rustup toolchain install stable-x86_64-pc-windows-msvc` + +or: + +`rustup toolchain install stable-msvc` + +activate toolchain with `rustup default` diff --git a/rear/Cargo.toml b/rear/Cargo.toml new file mode 100644 index 0000000..38f2083 --- /dev/null +++ b/rear/Cargo.toml @@ -0,0 +1,51 @@ +[package] +name = "rear" +version = "0.1.0" +edition = "2021" +publish = false + +[lib] +name = "rear" +path = "src/lib.rs" + +[features] +# https://github.com/rust-db/barrel/blob/master/guides/diesel-setup.md +use_barrel = ["barrel", "sqlformat"] +default = ["use_barrel"] + +[dependencies] +sea-orm = { version = "0.12.10", features = [ + "runtime-tokio-native-tls", + "sqlx-postgres", +] } +sqlformat = { version = "0.2.2", optional = true } +anyhow = "1.0.75" +axum = "0.7" +barrel = { version = "0.7.0", optional = true, features = ["pg"] } +dotenvy = "0.15.7" +mime_guess = "2.0.4" +minijinja = { version = "1.0.11", features = [ + "loader", + "builtins", + "urlencode", + "deserialization", +] } +minijinja-autoreload = "1.0.8" +once_cell = "1.18.0" +pulldown-cmark = "0.9.3" +rust-embed = { version = "8.0.0", features = [ + "axum", + "tokio", + "include-exclude", +] } +serde = { version = "1.0.188", features = ["derive"] } +tokio = { version = "1.32.0", features = ["full"] } +dunce = "1.0.4" +log = "0.4.20" +env_logger = "0.11" +serde_json = "1.0.108" +slug = "0.1.5" +derive_builder = "0.13.0" +async-trait = "0.1.77" +tracing = "0.1.40" +tower-http = { version = "0.5.1", features = ["trace"] } diff --git a/src/admin/domain.rs b/rear/src/admin/domain.rs similarity index 100% rename from src/admin/domain.rs rename to rear/src/admin/domain.rs diff --git a/src/admin/mod.rs b/rear/src/admin/mod.rs similarity index 88% rename from src/admin/mod.rs rename to rear/src/admin/mod.rs index 75d3cec..268f8ee 100644 --- a/src/admin/mod.rs +++ b/rear/src/admin/mod.rs @@ -1,12 +1,10 @@ use axum::{routing::get, routing::post, Router}; -use crate::state::AppState; - pub mod domain; pub mod state; pub mod views; -pub fn routes() -> Router { +pub fn route() -> Router { Router::new() .route("/", get(views::index).post(views::index_action)) .route("/app/:app", get(views::list_app)) diff --git a/src/admin/state.rs b/rear/src/admin/state.rs similarity index 93% rename from src/admin/state.rs rename to rear/src/admin/state.rs index a9301c1..2306219 100644 --- a/src/admin/state.rs +++ b/rear/src/admin/state.rs @@ -1,10 +1,16 @@ use tokio::sync::Mutex; use super::domain::{AdminApp, AdminModel, AdminModelConfig, AdminRepository}; +use crate::service::templates::Templates; use std::collections::HashMap; use std::sync::Arc; -pub type AdminState = Arc; +pub trait AdminState { + fn get_templates(&self) -> &Templates; + fn get_registry(&self) -> SharedRegistry; +} + +pub type SharedRegistry = Arc; // main registry. pub struct AdminRegistry { diff --git a/src/admin/views.rs b/rear/src/admin/views.rs similarity index 100% rename from src/admin/views.rs rename to rear/src/admin/views.rs diff --git a/src/auth/mod.rs b/rear/src/auth/mod.rs similarity index 100% rename from src/auth/mod.rs rename to rear/src/auth/mod.rs diff --git a/src/auth/models.rs b/rear/src/auth/models.rs similarity index 100% rename from src/auth/models.rs rename to rear/src/auth/models.rs diff --git a/rear/src/lib.rs b/rear/src/lib.rs new file mode 100644 index 0000000..01b001c --- /dev/null +++ b/rear/src/lib.rs @@ -0,0 +1,3 @@ +pub mod admin; +pub mod auth; +pub mod service; diff --git a/src/service/error.rs b/rear/src/service/error.rs similarity index 100% rename from src/service/error.rs rename to rear/src/service/error.rs diff --git a/src/service/handlers.rs b/rear/src/service/handlers.rs similarity index 100% rename from src/service/handlers.rs rename to rear/src/service/handlers.rs diff --git a/src/service/mod.rs b/rear/src/service/mod.rs similarity index 100% rename from src/service/mod.rs rename to rear/src/service/mod.rs diff --git a/src/service/templates.rs b/rear/src/service/templates.rs similarity index 100% rename from src/service/templates.rs rename to rear/src/service/templates.rs diff --git a/src/main.rs b/src/main.rs index 840be3f..a4ab76f 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,10 +1,7 @@ -mod admin; mod admin_examples; mod howto; -mod service; mod state; -use crate::service::{handlers, templates}; use crate::state::AppState; use admin_examples::static_repository; use admin_examples::user_repository; @@ -19,6 +16,7 @@ use axum::{ }; use dotenvy::dotenv; use log::info; +use rear::service::{handlers, templates}; use std::env; use std::net::SocketAddr; use std::sync::Arc; diff --git a/src/state.rs b/src/state.rs index 904e69f..2b4eb48 100644 --- a/src/state.rs +++ b/src/state.rs @@ -1,7 +1,7 @@ use axum::extract::FromRef; -use crate::admin::state::AdminState; -use crate::service::templates; +use rear::admin::state::SharedRegistry; +use rear::service::templates; #[derive(Clone)] pub struct AppState { @@ -15,8 +15,8 @@ impl FromRef for templates::Templates { } } -impl FromRef for AdminState { - fn from_ref(app_state: &AppState) -> AdminState { +impl FromRef for SharedRegistry { + fn from_ref(app_state: &AppState) -> SharedRegistry { app_state.admin.clone() } }