diff options
author | metamuffin <metamuffin@disroot.org> | 2024-06-14 03:35:24 +0200 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2024-06-14 03:35:24 +0200 |
commit | 956b172ddbff214d055127fb89905f0057492a26 (patch) | |
tree | 675512962d99e59ff4cae5fd6153b8468b22f541 /src/main.rs | |
download | online-offsite-backup-956b172ddbff214d055127fb89905f0057492a26.tar online-offsite-backup-956b172ddbff214d055127fb89905f0057492a26.tar.bz2 online-offsite-backup-956b172ddbff214d055127fb89905f0057492a26.tar.zst |
server kinda works
Diffstat (limited to 'src/main.rs')
-rw-r--r-- | src/main.rs | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/src/main.rs b/src/main.rs new file mode 100644 index 0000000..243c621 --- /dev/null +++ b/src/main.rs @@ -0,0 +1,69 @@ +#![feature(iterator_try_collect)] +#![feature(never_type)] +pub mod server; + +use clap::{Parser, Subcommand}; +use serde::Deserialize; +use server::server; +use std::{fs::read_to_string, net::SocketAddr, path::PathBuf}; + +pub type Serial = u64; + +#[derive(Parser)] +struct Args { + config: PathBuf, + #[clap(subcommand)] + action: Action, +} + +#[derive(Subcommand)] +enum Action { + Daemon, + Restore { id: String, destination: PathBuf }, + Backup { path: PathBuf }, +} + +#[derive(Deserialize)] +pub struct Config { + storage: StorageConfig, + server: ServerConfig, + peer: Vec<PeerConfig>, +} + +#[derive(Deserialize)] +pub struct PeerConfig { + name: String, + address: SocketAddr, + shared_secret: String, +} + +#[derive(Deserialize)] +pub struct ServerConfig { + address: String, +} + +#[derive(Deserialize)] +pub struct StorageConfig { + root: PathBuf, + size: u64, + versions: usize, + upload_cooldown: u64, + download_cooldown: u64, + upload_speed: usize, + download_speed: usize, +} + +fn main() -> anyhow::Result<()> { + env_logger::init_from_env("LOG"); + let args = Args::parse(); + + let config = read_to_string(&args.config)?; + let config = toml::from_str::<Config>(&config)?; + + match args.action { + Action::Daemon => server(config.into())?, + Action::Restore { id, destination } => todo!(), + Action::Backup { path } => todo!(), + } + Ok(()) +} |