mirror of
https://github.com/Astatin3/unshell.git
synced 2026-06-08 22:38:01 -06:00
Begin implementing unshell_lib::manager functionality in server
This commit is contained in:
Generated
+13
-67
@@ -485,15 +485,6 @@ version = "0.1.2"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "d8b14ccef22fc6f5a8f4d7d768562a182c04ce9a3b3157b91390b52ddfdf1a76"
|
checksum = "d8b14ccef22fc6f5a8f4d7d768562a182c04ce9a3b3157b91390b52ddfdf1a76"
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "ecolor"
|
|
||||||
version = "0.31.1"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "bc4feb366740ded31a004a0e4452fbf84e80ef432ecf8314c485210229672fd1"
|
|
||||||
dependencies = [
|
|
||||||
"emath 0.31.1",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ecolor"
|
name = "ecolor"
|
||||||
version = "0.33.2"
|
version = "0.33.2"
|
||||||
@@ -501,7 +492,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||||||
checksum = "084980ebede2fb1ad6c4f54285b3e489052ef2b6aa4016e4c19349417adc75c5"
|
checksum = "084980ebede2fb1ad6c4f54285b3e489052ef2b6aa4016e4c19349417adc75c5"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bytemuck",
|
"bytemuck",
|
||||||
"emath 0.33.2",
|
"emath",
|
||||||
"serde",
|
"serde",
|
||||||
]
|
]
|
||||||
|
|
||||||
@@ -514,7 +505,7 @@ dependencies = [
|
|||||||
"ahash",
|
"ahash",
|
||||||
"bytemuck",
|
"bytemuck",
|
||||||
"document-features",
|
"document-features",
|
||||||
"egui 0.33.2",
|
"egui",
|
||||||
"egui-wgpu",
|
"egui-wgpu",
|
||||||
"egui-winit",
|
"egui-winit",
|
||||||
"egui_glow",
|
"egui_glow",
|
||||||
@@ -543,20 +534,6 @@ dependencies = [
|
|||||||
"winit",
|
"winit",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "egui"
|
|
||||||
version = "0.31.1"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "25dd34cec49ab55d85ebf70139cb1ccd29c977ef6b6ba4fe85489d6877ee9ef3"
|
|
||||||
dependencies = [
|
|
||||||
"ahash",
|
|
||||||
"bitflags 2.10.0",
|
|
||||||
"emath 0.31.1",
|
|
||||||
"epaint 0.31.1",
|
|
||||||
"nohash-hasher",
|
|
||||||
"profiling",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "egui"
|
name = "egui"
|
||||||
version = "0.33.2"
|
version = "0.33.2"
|
||||||
@@ -566,8 +543,8 @@ dependencies = [
|
|||||||
"accesskit",
|
"accesskit",
|
||||||
"ahash",
|
"ahash",
|
||||||
"bitflags 2.10.0",
|
"bitflags 2.10.0",
|
||||||
"emath 0.33.2",
|
"emath",
|
||||||
"epaint 0.33.2",
|
"epaint",
|
||||||
"log",
|
"log",
|
||||||
"nohash-hasher",
|
"nohash-hasher",
|
||||||
"profiling",
|
"profiling",
|
||||||
@@ -577,15 +554,6 @@ dependencies = [
|
|||||||
"unicode-segmentation",
|
"unicode-segmentation",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "egui-dropdown"
|
|
||||||
version = "0.13.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "82d277c6c1f49e4e227344e920132d2d22a51810296b5c78f90e6aef4eed63ea"
|
|
||||||
dependencies = [
|
|
||||||
"egui 0.31.1",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "egui-wgpu"
|
name = "egui-wgpu"
|
||||||
version = "0.33.2"
|
version = "0.33.2"
|
||||||
@@ -595,8 +563,8 @@ dependencies = [
|
|||||||
"ahash",
|
"ahash",
|
||||||
"bytemuck",
|
"bytemuck",
|
||||||
"document-features",
|
"document-features",
|
||||||
"egui 0.33.2",
|
"egui",
|
||||||
"epaint 0.33.2",
|
"epaint",
|
||||||
"log",
|
"log",
|
||||||
"profiling",
|
"profiling",
|
||||||
"thiserror 2.0.17",
|
"thiserror 2.0.17",
|
||||||
@@ -614,7 +582,7 @@ checksum = "4772ed5f16fa8ec2ba295e58f62b58ee83fcf49e67ec13d2b7ddf4e9a2dea34e"
|
|||||||
dependencies = [
|
dependencies = [
|
||||||
"arboard",
|
"arboard",
|
||||||
"bytemuck",
|
"bytemuck",
|
||||||
"egui 0.33.2",
|
"egui",
|
||||||
"log",
|
"log",
|
||||||
"objc2 0.5.2",
|
"objc2 0.5.2",
|
||||||
"objc2-foundation 0.2.2",
|
"objc2-foundation 0.2.2",
|
||||||
@@ -635,7 +603,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||||||
checksum = "550e844e608e356f4ad6843c510aa9bb5838b427e4700ed0056e9746ceeed866"
|
checksum = "550e844e608e356f4ad6843c510aa9bb5838b427e4700ed0056e9746ceeed866"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"ahash",
|
"ahash",
|
||||||
"egui 0.33.2",
|
"egui",
|
||||||
"enum-map",
|
"enum-map",
|
||||||
"log",
|
"log",
|
||||||
"mime_guess2",
|
"mime_guess2",
|
||||||
@@ -649,7 +617,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||||||
checksum = "17b94ff67a1d18933fff2519f5f57c388f932c093036c381fb9ae2853b3e1e09"
|
checksum = "17b94ff67a1d18933fff2519f5f57c388f932c093036c381fb9ae2853b3e1e09"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bytemuck",
|
"bytemuck",
|
||||||
"egui 0.33.2",
|
"egui",
|
||||||
"glow",
|
"glow",
|
||||||
"log",
|
"log",
|
||||||
"memoffset",
|
"memoffset",
|
||||||
@@ -666,7 +634,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||||||
checksum = "ebfac3ca35f5e4fe217d3b03312111b234fe55ce059faf62b4cb47f7cf6d54f1"
|
checksum = "ebfac3ca35f5e4fe217d3b03312111b234fe55ce059faf62b4cb47f7cf6d54f1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"ahash",
|
"ahash",
|
||||||
"egui 0.33.2",
|
"egui",
|
||||||
"itertools",
|
"itertools",
|
||||||
"log",
|
"log",
|
||||||
"serde",
|
"serde",
|
||||||
@@ -678,12 +646,6 @@ version = "1.15.0"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719"
|
checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719"
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "emath"
|
|
||||||
version = "0.31.1"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "9e4cadcff7a5353ba72b7fea76bf2122b5ebdbc68e8155aa56dfdea90083fe1b"
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "emath"
|
name = "emath"
|
||||||
version = "0.33.2"
|
version = "0.33.2"
|
||||||
@@ -725,21 +687,6 @@ dependencies = [
|
|||||||
"syn",
|
"syn",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "epaint"
|
|
||||||
version = "0.31.1"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "41fcc0f5a7c613afd2dee5e4b30c3e6acafb8ad6f0edb06068811f708a67c562"
|
|
||||||
dependencies = [
|
|
||||||
"ab_glyph",
|
|
||||||
"ahash",
|
|
||||||
"ecolor 0.31.1",
|
|
||||||
"emath 0.31.1",
|
|
||||||
"nohash-hasher",
|
|
||||||
"parking_lot",
|
|
||||||
"profiling",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "epaint"
|
name = "epaint"
|
||||||
version = "0.33.2"
|
version = "0.33.2"
|
||||||
@@ -749,8 +696,8 @@ dependencies = [
|
|||||||
"ab_glyph",
|
"ab_glyph",
|
||||||
"ahash",
|
"ahash",
|
||||||
"bytemuck",
|
"bytemuck",
|
||||||
"ecolor 0.33.2",
|
"ecolor",
|
||||||
"emath 0.33.2",
|
"emath",
|
||||||
"epaint_default_fonts",
|
"epaint_default_fonts",
|
||||||
"log",
|
"log",
|
||||||
"nohash-hasher",
|
"nohash-hasher",
|
||||||
@@ -2454,8 +2401,7 @@ version = "0.1.0"
|
|||||||
dependencies = [
|
dependencies = [
|
||||||
"chrono",
|
"chrono",
|
||||||
"eframe",
|
"eframe",
|
||||||
"egui 0.33.2",
|
"egui",
|
||||||
"egui-dropdown",
|
|
||||||
"egui_extras",
|
"egui_extras",
|
||||||
"egui_tiles",
|
"egui_tiles",
|
||||||
"log",
|
"log",
|
||||||
|
|||||||
@@ -41,7 +41,6 @@ wasm-bindgen = "0.2.106"
|
|||||||
web-sys = "0.3.70" # to access the DOM (to hide the loading text)
|
web-sys = "0.3.70" # to access the DOM (to hide the loading text)
|
||||||
serde_json = "1.0.145"
|
serde_json = "1.0.145"
|
||||||
chrono = "0.4.42"
|
chrono = "0.4.42"
|
||||||
egui-dropdown = "0.13.0"
|
|
||||||
|
|
||||||
[profile.release]
|
[profile.release]
|
||||||
opt-level = 2 # fast and small wasm
|
opt-level = 2 # fast and small wasm
|
||||||
|
|||||||
@@ -3,7 +3,6 @@ use std::{
|
|||||||
sync::{Arc, Mutex},
|
sync::{Arc, Mutex},
|
||||||
};
|
};
|
||||||
|
|
||||||
use egui::ComboBox;
|
|
||||||
use egui_extras::{Column, TableBuilder};
|
use egui_extras::{Column, TableBuilder};
|
||||||
|
|
||||||
use crate::auth::Auth;
|
use crate::auth::Auth;
|
||||||
|
|||||||
@@ -103,38 +103,4 @@ impl FlowChart {
|
|||||||
m.vel = Vec2::ZERO;
|
m.vel = Vec2::ZERO;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// pub fn get_positions(&self) -> &[Vec2] {
|
|
||||||
// &self.positions
|
|
||||||
// }
|
|
||||||
|
|
||||||
// pub fn get_connections(&self) -> &[(usize, usize)] {
|
|
||||||
// &self.connections
|
|
||||||
// }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// fn main() {
|
|
||||||
// // Example usage: Create a simple triangle graph
|
|
||||||
// let connections = vec![(0, 1), (1, 2), (2, 0)];
|
|
||||||
// let mut graph = ForceDirectedGraph::new(
|
|
||||||
// 3,
|
|
||||||
// connections,
|
|
||||||
// 1000.0, // repulsion_strength
|
|
||||||
// 0.1, // attraction_strength
|
|
||||||
// 50.0, // rest_length
|
|
||||||
// 0.9, // damping
|
|
||||||
// );
|
|
||||||
|
|
||||||
// // Simulate 100 frames at 60 FPS
|
|
||||||
// let delta_time = 1.0 / 60.0;
|
|
||||||
// for frame in 0..100 {
|
|
||||||
// graph.update(delta_time);
|
|
||||||
|
|
||||||
// if frame % 20 == 0 {
|
|
||||||
// println!("Frame {}: ", frame);
|
|
||||||
// for (i, pos) in graph.get_positions().iter().enumerate() {
|
|
||||||
// println!(" Node {}: ({:.2}, {:.2})", i, pos.x, pos.y);
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|||||||
@@ -9,10 +9,10 @@ use unshell_lib::{debug, info};
|
|||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
api::{auth, structs::CurrentUser},
|
api::{auth, structs::CurrentUser},
|
||||||
database::Database,
|
server::Server,
|
||||||
};
|
};
|
||||||
|
|
||||||
pub async fn start_api(address: &str, database: Database) {
|
pub async fn start_api(address: &str, server: Server) {
|
||||||
let listener = TcpListener::bind(address)
|
let listener = TcpListener::bind(address)
|
||||||
.await
|
.await
|
||||||
.expect("Unable to start listener");
|
.expect("Unable to start listener");
|
||||||
@@ -25,19 +25,19 @@ pub async fn start_api(address: &str, database: Database) {
|
|||||||
router = route_get_tree_keys(router);
|
router = route_get_tree_keys(router);
|
||||||
router = route_trees(router);
|
router = route_trees(router);
|
||||||
|
|
||||||
axum::serve(listener, router.with_state(database))
|
axum::serve(listener, router.with_state(server))
|
||||||
.await
|
.await
|
||||||
.expect("Error serving application");
|
.expect("Error serving application");
|
||||||
}
|
}
|
||||||
|
|
||||||
// Route the "keys" api for each tree
|
// Route the "keys" api for each tree
|
||||||
fn route_get_trees(router: Router<Database>) -> Router<Database> {
|
fn route_get_trees(router: Router<Server>) -> Router<Server> {
|
||||||
router.route(
|
router.route(
|
||||||
"/api/trees",
|
"/api/trees",
|
||||||
get(
|
get(
|
||||||
async |State(database): State<Database>, Extension(_): Extension<CurrentUser>| {
|
async |State(server): State<Server>, Extension(_): Extension<CurrentUser>| {
|
||||||
debug!("GET /api/trees");
|
debug!("GET /api/trees");
|
||||||
let result = database.get_trees();
|
let result = server.get_trees();
|
||||||
|
|
||||||
Json(serde_json::to_value(result).unwrap())
|
Json(serde_json::to_value(result).unwrap())
|
||||||
},
|
},
|
||||||
@@ -47,15 +47,15 @@ fn route_get_trees(router: Router<Database>) -> Router<Database> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Route the "keys" api for each tree
|
// Route the "keys" api for each tree
|
||||||
fn route_get_tree_keys(router: Router<Database>) -> Router<Database> {
|
fn route_get_tree_keys(router: Router<Server>) -> Router<Server> {
|
||||||
router.route(
|
router.route(
|
||||||
"/api/keys/{*path}",
|
"/api/keys/{*path}",
|
||||||
get(
|
get(
|
||||||
async |State(database): State<Database>,
|
async |State(server): State<Server>,
|
||||||
Path(path): Path<String>,
|
Path(path): Path<String>,
|
||||||
Extension(_): Extension<CurrentUser>| {
|
Extension(_): Extension<CurrentUser>| {
|
||||||
debug!("GET /api/keys/{}", path);
|
debug!("GET /api/keys/{}", path);
|
||||||
let result = database.get_keys(&path);
|
let result = server.get_keys(&path);
|
||||||
|
|
||||||
Json(serde_json::to_value(result).unwrap())
|
Json(serde_json::to_value(result).unwrap())
|
||||||
},
|
},
|
||||||
@@ -65,15 +65,15 @@ fn route_get_tree_keys(router: Router<Database>) -> Router<Database> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Route the "values" api to get all the values for each tree
|
// Route the "values" api to get all the values for each tree
|
||||||
fn route_get_all_tree_values(router: Router<Database>) -> Router<Database> {
|
fn route_get_all_tree_values(router: Router<Server>) -> Router<Server> {
|
||||||
router.route(
|
router.route(
|
||||||
"/api/values/{*path}",
|
"/api/values/{*path}",
|
||||||
get(
|
get(
|
||||||
async |State(database): State<Database>,
|
async |State(server): State<Server>,
|
||||||
Path(path): Path<String>,
|
Path(path): Path<String>,
|
||||||
Extension(_): Extension<CurrentUser>| {
|
Extension(_): Extension<CurrentUser>| {
|
||||||
debug!("GET /api/values/{}", path);
|
debug!("GET /api/values/{}", path);
|
||||||
let result = database.all_tree_values(&path);
|
let result = server.all_tree_values(&path);
|
||||||
|
|
||||||
Json(serde_json::to_value(result).unwrap())
|
Json(serde_json::to_value(result).unwrap())
|
||||||
},
|
},
|
||||||
@@ -83,17 +83,17 @@ fn route_get_all_tree_values(router: Router<Database>) -> Router<Database> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Loop through all trees and add /api/<tree>/<path> POST aand GET listeners for them
|
// Loop through all trees and add /api/<tree>/<path> POST aand GET listeners for them
|
||||||
fn route_trees(mut router: Router<Database>) -> Router<Database> {
|
fn route_trees(mut router: Router<Server>) -> Router<Server> {
|
||||||
for tree in crate::DATABASE_TREES.iter() {
|
for tree in crate::DATABASE_TREES.iter() {
|
||||||
router = router
|
router = router
|
||||||
// Route GET requests to this tree
|
// Route GET requests to this tree
|
||||||
.route(
|
.route(
|
||||||
&format!("/api/{}/{{*path}}", tree),
|
&format!("/api/{}/{{*path}}", tree),
|
||||||
get(
|
get(
|
||||||
async |State(database): State<Database>,
|
async |State(server): State<Server>,
|
||||||
Path(path): Path<String>,
|
Path(path): Path<String>,
|
||||||
Extension(_): Extension<CurrentUser>| {
|
Extension(_): Extension<CurrentUser>| {
|
||||||
let result = database.get_value(tree, &path);
|
let result = server.get_value(tree, &path);
|
||||||
debug!("GET /api/{}/{}", tree.to_string(), path);
|
debug!("GET /api/{}/{}", tree.to_string(), path);
|
||||||
|
|
||||||
Json(serde_json::to_value(result).unwrap())
|
Json(serde_json::to_value(result).unwrap())
|
||||||
@@ -105,11 +105,11 @@ fn route_trees(mut router: Router<Database>) -> Router<Database> {
|
|||||||
.route(
|
.route(
|
||||||
&format!("/api/{}/{{*path}}", tree),
|
&format!("/api/{}/{{*path}}", tree),
|
||||||
post(
|
post(
|
||||||
async |State(database): State<Database>,
|
async |State(server): State<Server>,
|
||||||
Path(path): Path<String>,
|
Path(path): Path<String>,
|
||||||
Extension(_): Extension<CurrentUser>,
|
Extension(_): Extension<CurrentUser>,
|
||||||
body: String| {
|
body: String| {
|
||||||
let result = database.put_value(tree, &path, &body);
|
let result = server.put_value(tree, &path, &body);
|
||||||
debug!("POST /api/{}/{}", tree.to_string(), path);
|
debug!("POST /api/{}/{}", tree.to_string(), path);
|
||||||
|
|
||||||
Json(serde_json::to_value(result).unwrap())
|
Json(serde_json::to_value(result).unwrap())
|
||||||
|
|||||||
@@ -1,8 +1,22 @@
|
|||||||
// #![macro_use]
|
// #![macro_use]
|
||||||
|
|
||||||
mod api;
|
mod api;
|
||||||
pub mod database;
|
mod server;
|
||||||
pub use api::app::start_api;
|
pub use api::app::start_api;
|
||||||
|
|
||||||
|
pub use server::Server;
|
||||||
|
|
||||||
#[static_init::dynamic]
|
#[static_init::dynamic]
|
||||||
static DATABASE_TREES: Vec<&'static str> = vec!["users"];
|
pub static DATABASE_TREES: Vec<&'static str> = vec!["users"];
|
||||||
|
|
||||||
|
#[static_init::dynamic]
|
||||||
|
pub static DEFAULT_HOST: String = "localhost".to_string();
|
||||||
|
#[static_init::dynamic]
|
||||||
|
pub static DATABASE_NAME: String = "database".to_string();
|
||||||
|
|
||||||
|
#[static_init::dynamic]
|
||||||
|
pub static SERVER_CONFIG: unshell_lib::config::PayloadConfig = unshell_lib::config::PayloadConfig {
|
||||||
|
id: "Server",
|
||||||
|
components: unshell_lib::get_components(),
|
||||||
|
runtime_config: Vec::new(),
|
||||||
|
};
|
||||||
|
|||||||
@@ -1,12 +1,7 @@
|
|||||||
use unshell_server::{database::Database, start_api};
|
use unshell_server::{Server, start_api};
|
||||||
|
|
||||||
use clap::Parser;
|
use clap::Parser;
|
||||||
use static_init::dynamic;
|
use unshell_server::{DATABASE_NAME, DEFAULT_HOST};
|
||||||
|
|
||||||
#[dynamic]
|
|
||||||
static DEFAULT_HOST: String = "localhost".to_string();
|
|
||||||
#[dynamic]
|
|
||||||
static DATABASE_NAME: String = "database".to_string();
|
|
||||||
|
|
||||||
/// A fictional versioning CLI
|
/// A fictional versioning CLI
|
||||||
#[derive(Debug, Parser)]
|
#[derive(Debug, Parser)]
|
||||||
@@ -32,7 +27,7 @@ async fn main() {
|
|||||||
|
|
||||||
unshell_lib::logger::PrettyLogger::init();
|
unshell_lib::logger::PrettyLogger::init();
|
||||||
|
|
||||||
let database = Database::new(args.database_name);
|
let database = Server::new(args.database_name);
|
||||||
|
|
||||||
start_api(&format!("{}:{}", args.host, args.port), database).await;
|
start_api(&format!("{}:{}", args.host, args.port), database).await;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,18 +3,14 @@ use std::collections::HashMap;
|
|||||||
use sled::Tree;
|
use sled::Tree;
|
||||||
use unshell_lib::error;
|
use unshell_lib::error;
|
||||||
|
|
||||||
#[derive(Clone)]
|
use crate::server::Server;
|
||||||
pub struct Database {
|
|
||||||
db: sled::Db,
|
|
||||||
}
|
|
||||||
|
|
||||||
impl Database {
|
// #[derive(Clone)]
|
||||||
pub fn new(database: String) -> Self {
|
// pub struct Database {
|
||||||
Self {
|
// db: sled::Db,
|
||||||
db: sled::open(database).expect("Failed to open database"),
|
// }
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
impl Server {
|
||||||
fn get_tree(&self, tree_name: &str) -> Result<Tree, String> {
|
fn get_tree(&self, tree_name: &str) -> Result<Tree, String> {
|
||||||
self.db.open_tree(tree_name).map_err(|e| {
|
self.db.open_tree(tree_name).map_err(|e| {
|
||||||
error!("DB Failed to open tree: {}", e);
|
error!("DB Failed to open tree: {}", e);
|
||||||
@@ -77,9 +73,3 @@ impl Database {
|
|||||||
.collect::<HashMap<String, String>>())
|
.collect::<HashMap<String, String>>())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Drop for Database {
|
|
||||||
fn drop(&mut self) {
|
|
||||||
self.db.flush().expect("Failed to flush database on drop");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
mod database;
|
||||||
|
mod manager;
|
||||||
|
|
||||||
|
use std::sync::{Arc, Mutex};
|
||||||
|
|
||||||
|
use unshell_lib::module::Manager;
|
||||||
|
|
||||||
|
use crate::SERVER_CONFIG;
|
||||||
|
|
||||||
|
#[derive(Clone)]
|
||||||
|
pub struct Server {
|
||||||
|
pub manager: Arc<Mutex<Manager>>,
|
||||||
|
pub db: sled::Db,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Server {
|
||||||
|
pub fn new(database: String) -> Self {
|
||||||
|
Self {
|
||||||
|
manager: Manager::start(&SERVER_CONFIG, Vec::new()),
|
||||||
|
db: sled::open(database).expect("Failed to open database"),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Drop for Server {
|
||||||
|
fn drop(&mut self) {
|
||||||
|
self.db.flush().expect("Failed to flush database on drop");
|
||||||
|
Manager::join(self.manager.clone());
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user