1
0
forked from brl/citadel-tools
citadel-tools/citadel-realms/src/config.rs

113 lines
2.4 KiB
Rust

use std::path::Path;
use std::fs::File;
use std::io::Read;
use toml;
use Result;
fn default_true() -> bool {
true
}
fn default_zone() -> String {
"clear".to_owned()
}
#[derive (Deserialize,Clone)]
pub struct RealmConfig {
#[serde(default = "default_true", rename="use-shared-dir")]
use_shared_dir: bool,
#[serde(default, rename="use-ephemeral-home")]
use_ephemeral_home: bool,
#[serde(default = "default_true", rename="use-sound")]
use_sound: bool,
#[serde(default = "default_true", rename="use-x11")]
use_x11: bool,
#[serde(default = "default_true", rename="use-wayland")]
use_wayland: bool,
#[serde(default, rename="use-kvm")]
use_kvm: bool,
#[serde(default,rename="use-gpu")]
use_gpu: bool,
#[serde(default = "default_true", rename="use-network")]
use_network: bool,
#[serde(default = "default_zone", rename="network-zone")]
network_zone: String,
}
impl RealmConfig {
pub fn load_or_default(path: &Path) -> Result<RealmConfig> {
if path.exists() {
let s = load_as_string(&path)?;
let config = toml::from_str::<RealmConfig>(&s)?;
Ok(config)
} else {
Ok(RealmConfig::default())
}
}
pub fn default() -> RealmConfig {
RealmConfig {
use_shared_dir: true,
use_ephemeral_home: false,
use_sound: true,
use_x11: true,
use_wayland: true,
use_kvm: false,
use_gpu: false,
use_network: true,
network_zone: default_zone(),
}
}
pub fn kvm(&self) -> bool {
self.use_kvm
}
pub fn gpu(&self) -> bool {
self.use_gpu
}
pub fn shared_dir(&self) -> bool {
self.use_shared_dir
}
pub fn emphemeral_home(&self) -> bool {
self.use_ephemeral_home
}
pub fn sound(&self) -> bool {
self.use_sound
}
pub fn x11(&self) -> bool {
self.use_x11
}
pub fn wayland(&self) -> bool {
self.use_wayland
}
pub fn network(&self) -> bool {
self.use_network
}
pub fn network_zone(&self) -> &str {
&self.network_zone
}
}
fn load_as_string(path: &Path) -> Result<String> {
let mut f = File::open(path)?;
let mut buffer = String::new();
f.read_to_string(&mut buffer)?;
Ok(buffer)
}