x11_input_mirror/
config.rs1use toml;
2
3use std::fs::File;
4use std::io::prelude::*;
5use std::net::SocketAddr;
6
7#[derive(Deserialize, Clone, Debug)]
8#[serde(deny_unknown_fields)]
9pub struct ServerConfig {
10 pub interface_and_port: SocketAddr,
11 pub max_ping_ms: u64,
12}
13
14#[derive(Deserialize, Clone, Debug)]
15#[serde(deny_unknown_fields)]
16pub struct GrabberConfig {
17 pub servers: Vec<SocketAddr>,
18 pub max_ping_ms: u64,
19 pub mouse_interval_ms: u64,
20 pub keyboard_and_clicks_interval_ms: u64,
21}
22
23#[derive(Deserialize, Clone, Debug)]
24#[serde(deny_unknown_fields)]
25pub struct SecurityConfig {
26 pub password: String,
27}
28
29macro_rules! generate_loader {
30 ($struct:tt) => {
31 impl $struct {
32 pub fn load() -> $struct {
33 let filename = stringify!($struct).to_string() + ".toml";
34 let filename = &filename;
35
36 let mut file = File::open(filename)
37 .unwrap_or_else(|_| panic!("File {} doesn't exist", filename));
38 let mut contents = String::new();
39 file.read_to_string(&mut contents)
40 .unwrap_or_else(|_| panic!("{} is not UTF-8 formatted", filename));
41 toml::from_str(&contents)
42 .unwrap_or_else(|_| panic!("{} is not a valid TOML file", filename))
43 }
44 }
45 };
46}
47
48generate_loader!(ServerConfig);
49generate_loader!(GrabberConfig);
50generate_loader!(SecurityConfig);