feat: file builder for upcoming monado autorun config

This commit is contained in:
Gabriele Musco 2023-07-10 07:43:56 +02:00
parent b409fe49f7
commit c17d733c29
No known key found for this signature in database
GPG key ID: 1068D795C80E51DE
3 changed files with 85 additions and 0 deletions

View file

@ -1,3 +1,4 @@
pub mod active_runtime_json;
pub mod openvrpaths_vrpath;
pub mod wivrn_config;
pub mod monado_autorun;

View file

@ -0,0 +1,75 @@
use expect_dialog::ExpectDialog;
use serde::{Deserialize, Serialize};
use crate::file_utils::{deserialize_file, get_writer, get_xdg_config_dir};
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct MonadoAutorun {
pub exec: String,
pub args: Vec<String>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct MonadoAutorunConfig {
#[serde(skip_serializing_if = "Option::is_none", rename = "$schema")]
_schema: Option<String>,
pub autoruns: Vec<MonadoAutorun>,
}
impl Default for MonadoAutorunConfig {
fn default() -> Self {
Self {
_schema: Some(
"https://monado.pages.freedesktop.org/monado/autorun_v0.schema.json".into(),
),
autoruns: vec![],
}
}
}
fn get_monado_autorun_config_path() -> String {
format!(
"{config}/monado/autorun_v0.json",
config = get_xdg_config_dir()
)
}
fn get_monado_autorun_config_from_path(path_s: &String) -> Option<MonadoAutorunConfig> {
deserialize_file(path_s)
}
pub fn get_monado_autorun_config() -> MonadoAutorunConfig {
get_monado_autorun_config_from_path(&get_monado_autorun_config_path())
.unwrap_or(MonadoAutorunConfig::default())
}
fn dump_monado_autorun_config_to_path(config: &MonadoAutorunConfig, path_s: &String) {
let writer = get_writer(path_s);
serde_json::to_writer_pretty(writer, config)
.expect_dialog("Unable to save Monado Autorun config");
}
pub fn dump_monado_autorun_config(config: &MonadoAutorunConfig) {
dump_monado_autorun_config_to_path(config, &get_monado_autorun_config_path());
}
#[cfg(test)]
mod tests {
use super::get_monado_autorun_config_from_path;
#[test]
fn can_read_monado_autorun_config() {
let conf =
get_monado_autorun_config_from_path(&"./test/files/monado_autorun_config.json".into())
.expect("Could not find monado autorun config");
assert_eq!(
conf._schema,
Some("https://monado.pages.freedesktop.org/monado/autorun_v0.schema.json".into())
);
assert_eq!(conf.autoruns.len(), 1);
assert_eq!(conf.autoruns.get(0).unwrap().exec, "foobar");
assert_eq!(conf.autoruns.get(0).unwrap().args.len(), 2);
assert_eq!(conf.autoruns.get(0).unwrap().args.get(0).unwrap(), "bar");
assert_eq!(conf.autoruns.get(0).unwrap().args.get(1).unwrap(), "baz");
}
}

View file

@ -0,0 +1,9 @@
{
"$schema": "https://monado.pages.freedesktop.org/monado/autorun_v0.schema.json",
"autoruns": [
{
"exec": "foobar",
"args": ["bar", "baz"]
}
]
}