Config is now setup mostly :3
This commit is contained in:
17
Cargo.lock
generated
17
Cargo.lock
generated
@@ -67,6 +67,12 @@ dependencies = [
|
|||||||
"windows-sys 0.61.2",
|
"windows-sys 0.61.2",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "anyhow"
|
||||||
|
version = "1.0.103"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "2a4385e2e34eb35d6b3efe798b9eb88096925d87726c0798709bf56d9ed84af3"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "bitflags"
|
name = "bitflags"
|
||||||
version = "1.3.2"
|
version = "1.3.2"
|
||||||
@@ -79,6 +85,15 @@ version = "1.12.0"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "8ae3f5d315924270530207e2a68396c3cc547f6dca3fbdca317cfb1a51edb593"
|
checksum = "8ae3f5d315924270530207e2a68396c3cc547f6dca3fbdca317cfb1a51edb593"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "camino"
|
||||||
|
version = "1.2.4"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "5f2d30e4173c4026932d51d31d6b0613b1fd3014bf3f9f8943d4ba139c437ba0"
|
||||||
|
dependencies = [
|
||||||
|
"serde_core",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "cc"
|
name = "cc"
|
||||||
version = "1.2.60"
|
version = "1.2.60"
|
||||||
@@ -716,6 +731,8 @@ dependencies = [
|
|||||||
name = "wara"
|
name = "wara"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
|
"anyhow",
|
||||||
|
"camino",
|
||||||
"clap",
|
"clap",
|
||||||
"env_logger",
|
"env_logger",
|
||||||
"log",
|
"log",
|
||||||
|
|||||||
@@ -4,6 +4,8 @@ version = "0.1.0"
|
|||||||
edition = "2024"
|
edition = "2024"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
|
anyhow = "1.0.103"
|
||||||
|
camino = { version = "1.2.4", features = ["serde1"] }
|
||||||
clap = { version = "4.6.1", features = ["derive"] }
|
clap = { version = "4.6.1", features = ["derive"] }
|
||||||
env_logger = "0.11.11"
|
env_logger = "0.11.11"
|
||||||
log = "0.4.33"
|
log = "0.4.33"
|
||||||
|
|||||||
13
config.default.toml
Normal file
13
config.default.toml
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
[default_logins]
|
||||||
|
username="monitor"
|
||||||
|
password="HewoWorld"
|
||||||
|
|
||||||
|
[[host]]
|
||||||
|
name="Example1"
|
||||||
|
ip="127.0.0.1"
|
||||||
|
|
||||||
|
[[host]]
|
||||||
|
name="Example2"
|
||||||
|
ip="127.0.0.2"
|
||||||
|
username="admin"
|
||||||
|
password="password123"
|
||||||
13
config.toml
Normal file
13
config.toml
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
[default_logins]
|
||||||
|
username="monitor"
|
||||||
|
password="HewoWorld"
|
||||||
|
|
||||||
|
[[host]]
|
||||||
|
name="Example1"
|
||||||
|
ip="127.0.0.1"
|
||||||
|
|
||||||
|
[[host]]
|
||||||
|
name="Example2"
|
||||||
|
ip="127.0.0.2"
|
||||||
|
username="admin"
|
||||||
|
password="password123"
|
||||||
10
src/config/cli.rs
Normal file
10
src/config/cli.rs
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
#[derive(Debug, Clone, Default, clap::Parser)]
|
||||||
|
pub struct CliArgs {
|
||||||
|
/// Configuration file path
|
||||||
|
#[arg(long = "config", short = 'C', default_value = "./config.toml")]
|
||||||
|
pub config_file: camino::Utf8PathBuf,
|
||||||
|
|
||||||
|
/// Output more information in logs
|
||||||
|
#[arg(long = "verbose", short = 'v')]
|
||||||
|
pub verbose: bool,
|
||||||
|
}
|
||||||
@@ -0,0 +1,77 @@
|
|||||||
|
use std::net::{IpAddr, Ipv4Addr};
|
||||||
|
|
||||||
|
use clap::Parser;
|
||||||
|
use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
|
use crate::config::cli::CliArgs;
|
||||||
|
|
||||||
|
const DEFAULT_CONFIG: &'static str = include_str!("../../config.default.toml");
|
||||||
|
|
||||||
|
mod cli;
|
||||||
|
|
||||||
|
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
|
||||||
|
pub struct Config {
|
||||||
|
pub default_logins: ConfigDefaultLogins,
|
||||||
|
#[serde(rename = "host")]
|
||||||
|
pub hosts: Vec<ConfigHost>,
|
||||||
|
|
||||||
|
#[serde(skip)]
|
||||||
|
pub cli: CliArgs,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
|
||||||
|
pub struct ConfigDefaultLogins {
|
||||||
|
pub username: String,
|
||||||
|
pub password: String,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||||||
|
pub struct ConfigHost {
|
||||||
|
pub name: String,
|
||||||
|
pub ip: IpAddr,
|
||||||
|
pub username: Option<String>,
|
||||||
|
pub password: Option<String>,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Config {
|
||||||
|
pub fn parse() -> anyhow::Result<Self> {
|
||||||
|
let cli = cli::CliArgs::parse();
|
||||||
|
|
||||||
|
if !cli.config_file.exists() {
|
||||||
|
std::fs::write(&cli.config_file, DEFAULT_CONFIG)?;
|
||||||
|
}
|
||||||
|
|
||||||
|
let text = std::fs::read_to_string(&cli.config_file)?;
|
||||||
|
let mut slf: Config = toml::from_str(&text)?;
|
||||||
|
slf.cli = cli;
|
||||||
|
Ok(slf)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl ConfigHost {
|
||||||
|
pub fn username<'a>(&'a self, cfg: &'a Config) -> &'a String {
|
||||||
|
if let Some(username) = &self.username {
|
||||||
|
username
|
||||||
|
} else {
|
||||||
|
&cfg.default_logins.username
|
||||||
|
}
|
||||||
|
}
|
||||||
|
pub fn password<'a>(&'a self, cfg: &'a Config) -> &'a String {
|
||||||
|
if let Some(password) = &self.password {
|
||||||
|
password
|
||||||
|
} else {
|
||||||
|
&cfg.default_logins.password
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Default for ConfigHost {
|
||||||
|
fn default() -> Self {
|
||||||
|
Self {
|
||||||
|
name: String::default(),
|
||||||
|
ip: IpAddr::V4(Ipv4Addr::new(127, 0, 0, 1)),
|
||||||
|
username: None,
|
||||||
|
password: None,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,3 +1,8 @@
|
|||||||
fn main() {
|
mod config;
|
||||||
println!("Hello, world!");
|
mod mt_commander;
|
||||||
|
|
||||||
|
fn main() -> anyhow::Result<()> {
|
||||||
|
let cfg = config::Config::parse()?;
|
||||||
|
dbg!(&cfg);
|
||||||
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user