Skip to content

Commit a4175b6

Browse files
sub07Marius Pardo
authored andcommitted
start config scripting exploration
1 parent bb8fd90 commit a4175b6

6 files changed

Lines changed: 225 additions & 8 deletions

File tree

Cargo.lock

Lines changed: 157 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,9 @@ itertools = "0"
1818
keyboard-types = { version = "0.8", features = ["std", "serde"] }
1919
dirs = "6"
2020
webbrowser = "1"
21+
serde = { version = "1", features = ["derive", "std"] }
22+
koto = "0.16"
23+
2124

2225
[dependencies.windows]
2326
version = "0.62"

config/main.koto

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
from tiler import tiler
2+
3+
export {
4+
tiler,
5+
}

config/tiler.koto

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
export
2+
tiler:
3+
padding: 16.0

src/config.rs

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
use std::fs;
2+
3+
use koto::{
4+
CompileArgs, Koto, KotoSettings,
5+
runtime::{KValue, KotoVmSettings},
6+
serde::from_koto_value,
7+
};
8+
9+
/// Winri configuration
10+
11+
#[derive(serde::Deserialize, serde::Serialize, Debug, Clone)]
12+
pub struct Root {
13+
pub tiler: Tiler,
14+
}
15+
16+
#[derive(serde::Deserialize, serde::Serialize, Debug, Clone)]
17+
pub struct Tiler {
18+
padding: f32,
19+
}
20+
21+
#[derive(Debug)]
22+
pub enum LoadError {
23+
NotFound,
24+
ConfigScript(String),
25+
BadScriptExport(String),
26+
Validation(String),
27+
}
28+
29+
pub fn load() -> Result<Root, LoadError> {
30+
let config_script = fs::read_to_string("config/main.koto").map_err(|_| LoadError::NotFound)?;
31+
32+
let mut koto = Koto::default();
33+
34+
let config_script_return = koto
35+
.compile_and_run(CompileArgs::new(&config_script).script_path("config/main.koto"))
36+
.map_err(|e| LoadError::ConfigScript(format!("Error in config script: {e}")))?;
37+
38+
let config: Root = from_koto_value(koto.exports().clone())
39+
.map_err(|e| LoadError::BadScriptExport(format!("Error converting config exports: {e}")))?;
40+
41+
Ok(config)
42+
}

src/main.rs

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ use anyhow::{Context, anyhow};
1616
mod adapter;
1717
mod app;
1818
mod bug_report;
19+
mod config;
1920
mod logger;
2021
mod scroll_tiler;
2122
mod system;
@@ -34,14 +35,14 @@ pub fn root_dir() -> anyhow::Result<PathBuf> {
3435
}
3536

3637
fn main() {
37-
let default_hook = panic::take_hook();
38-
panic::set_hook(Box::new(move |info| {
39-
log::error!("Winri panicked: {info}");
40-
bug_report::display_and_exit(info);
41-
system::restore_windows();
42-
default_hook(info);
43-
std::process::exit(1);
44-
}));
38+
// let default_hook = panic::take_hook();
39+
// panic::set_hook(Box::new(move |info| {
40+
// log::error!("Winri panicked: {info}");
41+
// bug_report::display_and_exit(info);
42+
// system::restore_windows();
43+
// default_hook(info);
44+
// std::process::exit(1);
45+
// }));
4546

4647
if let Err(e) = logger::setup()
4748
.context("Could not initialize log system, no log will be written for this session")
@@ -51,6 +52,12 @@ fn main() {
5152

5253
log::info!("Winri starting up");
5354

55+
let config = config::load().unwrap();
56+
57+
println!("{config:#?}");
58+
59+
return;
60+
5461
if let Err(e) = iced::daemon(
5562
app::State::new,
5663
app::State::handle_app_message,

0 commit comments

Comments
 (0)