Add type foundations and structure.

This commit is contained in:
abbie 2024-11-23 20:33:39 +00:00
parent 51bbfa1af0
commit ea93622381
Signed by: threeoh6000
GPG key ID: 801FE4AD456E922C
7 changed files with 199 additions and 0 deletions

1
.gitignore vendored Normal file
View file

@ -0,0 +1 @@
/target

98
Cargo.lock generated Normal file
View file

@ -0,0 +1,98 @@
# This file is automatically @generated by Cargo.
# It is not intended for manual editing.
version = 3
[[package]]
name = "calamari"
version = "0.0.0-indev"
dependencies = [
"sqlite",
"uuid",
]
[[package]]
name = "cc"
version = "1.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fd9de9f2205d5ef3fd67e685b0df337994ddd4495e2a28d185500d0e1edfea47"
dependencies = [
"shlex",
]
[[package]]
name = "cfg-if"
version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
[[package]]
name = "getrandom"
version = "0.2.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7"
dependencies = [
"cfg-if",
"libc",
"wasi",
]
[[package]]
name = "libc"
version = "0.2.161"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8e9489c2807c139ffd9c1794f4af0ebe86a828db53ecdc7fea2111d0fed085d1"
[[package]]
name = "pkg-config"
version = "0.3.31"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "953ec861398dccce10c670dfeaf3ec4911ca479e9c02154b3a215178c5f566f2"
[[package]]
name = "shlex"
version = "1.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64"
[[package]]
name = "sqlite"
version = "0.36.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5dfe6fb16f2bee6452feeb4d12bfa404fbcd3cfc121b2950e501d1ae9cae718e"
dependencies = [
"sqlite3-sys",
]
[[package]]
name = "sqlite3-src"
version = "0.6.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "174d4a6df77c27db281fb23de1a6d968f3aaaa4807c2a1afa8056b971f947b4a"
dependencies = [
"cc",
"pkg-config",
]
[[package]]
name = "sqlite3-sys"
version = "0.17.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3901ada7090c3c3584dc92ec7ef1b7091868d13bfe6d7de9f0bcaffee7d0ade5"
dependencies = [
"sqlite3-src",
]
[[package]]
name = "uuid"
version = "1.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f8c5f0a0af699448548ad1a2fbf920fb4bee257eae39953ba95cb84891a0446a"
dependencies = [
"getrandom",
]
[[package]]
name = "wasi"
version = "0.11.0+wasi-snapshot-preview1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"

8
Cargo.toml Normal file
View file

@ -0,0 +1,8 @@
[package]
name = "calamari"
version = "0.0.0-indev"
edition = "2021"
[dependencies]
sqlite = "0.36.1"
uuid = { version = "1.11.0", features = ["v4"] }

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

@ -0,0 +1,2 @@
// Database abstraction.
mod sqlite;

42
src/db/sqlite.rs Normal file
View file

@ -0,0 +1,42 @@
// SQLite to Calamari DB abstraction.
use std::path::PathBuf;
pub struct DatabaseCredentials {
pub server: Option<String>,
pub username: Option<String>,
pub password: Option<String>,
}
impl DatabaseCredentials {
pub fn new() -> DatabaseCredentials {
return DatabaseCredentials { server: None, username: None, password: None };
}
}
pub struct Database {
connection: sqlite::Connection,
}
impl Database {
pub fn open(creds: DatabaseCredentials) -> Result<Database, String> {
if creds.server.is_none() {
return Err("No database location provided.".to_string());
}
let conn = sqlite::open(PathBuf::from(creds.server.unwrap()));
if conn.is_ok() {
return Ok(Database { connection: conn.unwrap() });
} else {
return Err("Issue opening DB".to_string());
}
}
pub fn create_schema(&mut self) -> Result<(), sqlite::Error> {
let query = "
CREATE TABLE devices (uuid TEXT, current_channel TEXT);
CREATE TABLE channels (uuid TEXT, name TEXT, widgets TEXT);
CREATE TABLE widgets (uuid TEXT, name TEXT, location TEXT);
CREATE TABLE users (uuid TEXT, username TEXT, password TEXT);
";
return self.connection.execute(query);
}
}

7
src/main.rs Normal file
View file

@ -0,0 +1,7 @@
// Calamari server main file.
mod schema;
mod db;
fn main() {
}

41
src/schema.rs Normal file
View file

@ -0,0 +1,41 @@
// Common Calamari server types used throughout the program.
use uuid::Uuid;
use std::path::PathBuf;
#[derive(Debug, Clone)]
pub struct Device {
pub uuid: Uuid,
pub current_channel: Option<Channel>
}
impl Device {
pub fn new() -> Device {
return Device { uuid: Uuid::nil(), current_channel: None };
}
}
#[derive(Debug, Clone)]
pub struct Channel {
pub uuid: Uuid,
pub name: String,
pub widgets: Vec<Widget>,
}
impl Channel {
pub fn new() -> Channel {
return Channel { uuid: Uuid::nil(), name: "".to_string(), widgets: vec![] };
}
}
#[derive(Debug, Clone)]
pub struct Widget {
pub uuid: Uuid,
pub name: String,
pub location: PathBuf,
}
impl Widget {
pub fn new() -> Widget {
return Widget { uuid: Uuid::nil(), name: "".to_string(), location: PathBuf::new() };
}
}