This commit is contained in:
Hamcha 2025-01-25 13:22:58 +01:00
commit b3a5f342bd
Signed by: hamcha
GPG key ID: 1669C533B8CF6D89
19 changed files with 3176 additions and 0 deletions

10
.gitignore vendored Normal file
View file

@ -0,0 +1,10 @@
# Generated by Cargo
# will have compiled files and executables
/target
/dist/
/.idea/
/.vscode/
.DS_Store
# These are backup files generated by rustfmt
**/*.rs.bk

2997
Cargo.lock generated Normal file

File diff suppressed because it is too large Load diff

28
Cargo.toml Normal file
View file

@ -0,0 +1,28 @@
[package]
name = "mabel-hex"
version = "0.1.0"
authors = ["Ash Keel <ash@nebula.cafe>"]
edition = "2021"
[dependencies]
dioxus = { version = "0.6", features = ["fullstack"] }
dioxus-cli-config = "0.6"
dioxus-logger = "0.6"
dotenvy = { version = "0.15", optional = true }
[features]
default = []
server = ["dioxus/server", "dotenvy"]
web = ["dioxus/web"]
[profile]
[profile.wasm-dev]
inherits = "dev"
opt-level = 1
[profile.server-dev]
inherits = "dev"
[profile.android-dev]
inherits = "dev"

19
Dioxus.toml Normal file
View file

@ -0,0 +1,19 @@
[application]
name = "mabel"
default_platform = "fullstack"
out_dir = "dist"
asset_dir = "assets"
[web.app]
title = "Cenere"
[web.watcher]
reload_html = true
watch_path = ["src", "assets"]
[web.resource]
style = ["/assets/style/main.css"]
script = []
[web.resource.dev]
script = []

19
README.md Normal file
View file

@ -0,0 +1,19 @@
# Development
Your new bare-bones project includes minimal organization with a single `main.rs` file and a few assets.
### Serving Your App
Run the following command in the root of your project to start developing with the default platform:
```bash
dx serve --platform web
```
To run for a different platform, use the `--platform platform` flag. E.g.
```bash
dx serve --platform desktop
```

22
assets/main.css Normal file
View file

@ -0,0 +1,22 @@
@import url(https://rsms.me/inter/inter.css);
:root {
background-color: #F8F7FF;
color: rgb(23, 3, 21);
font-family: Inter, sans-serif;
/* fix for Chrome */
font-feature-settings: 'liga' 1, 'calt' 1;
}
@supports (font-variation-settings: normal) {
:root {
font-family: InterVariable, sans-serif;
}
}
html,
body {
padding: 0;
margin: 0;
}

View file

@ -0,0 +1 @@
pub mod site;

View file

@ -0,0 +1,4 @@
pub struct SiteMetadata {
pub domain: String,
pub title: String,
}

1
src/domain/mod.rs Normal file
View file

@ -0,0 +1 @@
pub mod entities;

2
src/inbound/mod.rs Normal file
View file

@ -0,0 +1,2 @@
#[cfg(any(feature = "web", feature = "server"))]
pub mod renderer;

View file

@ -0,0 +1,10 @@
#![allow(non_snake_case)]
use dioxus::prelude::*;
#[component]
pub fn App() -> Element {
rsx! {
h1 { "hello world" }
}
}

27
src/main.rs Normal file
View file

@ -0,0 +1,27 @@
use dioxus::prelude::*;
use dioxus_logger::tracing::Level;
use outbound::repository::adapters::static_data::StaticData;
mod domain;
mod inbound;
mod outbound;
fn main() {
#[cfg(feature = "server")]
{
let _ = dotenvy::dotenv();
}
dioxus_logger::init(Level::INFO).expect("logger failed to init");
let mut builder = dioxus::LaunchBuilder::new();
server_only! {
builder = builder
.with_context_provider(
|| {
Box::new(outbound::services::site::SiteService::new(StaticData{}))
}
);
}
builder.launch(inbound::renderer::App);
}

2
src/outbound/mod.rs Normal file
View file

@ -0,0 +1,2 @@
pub mod repository;
pub mod services;

View file

@ -0,0 +1 @@
pub mod static_data;

View file

@ -0,0 +1,12 @@
use crate::{domain::entities::site::SiteMetadata, outbound::repository::site::SiteRepository};
pub struct StaticData {}
impl SiteRepository for StaticData {
async fn get_site_by_domain(domain: &str) -> SiteMetadata {
SiteMetadata {
domain: domain.to_string(),
title: "Test site".to_string(),
}
}
}

View file

@ -0,0 +1,4 @@
pub mod site;
#[cfg(feature = "server")]
pub mod adapters;

View file

@ -0,0 +1,5 @@
use crate::domain::entities::site::SiteMetadata;
pub trait SiteRepository {
async fn get_site_by_domain(domain: &str) -> SiteMetadata;
}

View file

@ -0,0 +1 @@
pub mod site;

View file

@ -0,0 +1,11 @@
use crate::outbound::repository::site::SiteRepository;
pub struct SiteService<SiteRepo: SiteRepository> {
site_repository: SiteRepo,
}
impl<SiteRepo: SiteRepository> SiteService<SiteRepo> {
pub fn new(site_repository: SiteRepo) -> Self {
Self { site_repository }
}
}