x11_input_mirror/
config.rs

1use 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);