1
0
mirror of https://github.com/pcvolkmer/checkbar.git synced 2025-04-19 11:06:50 +00:00

Use enum with available values for mouse button

This commit is contained in:
Paul-Christian Volkmer 2023-02-14 21:16:51 +01:00
parent 56d2961527
commit a89709b39a
3 changed files with 48 additions and 3 deletions

12
Cargo.lock generated
View File

@ -86,6 +86,7 @@ dependencies = [
"serde", "serde",
"serde_derive", "serde_derive",
"serde_json", "serde_json",
"serde_repr",
"tokio", "tokio",
"toml", "toml",
] ]
@ -714,6 +715,17 @@ dependencies = [
"serde", "serde",
] ]
[[package]]
name = "serde_repr"
version = "0.1.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9a5ec9fa74a20ebbe5d9ac23dac1fc96ba0ecfe9f50f2843b52e537b10fbcb4e"
dependencies = [
"proc-macro2",
"quote",
"syn",
]
[[package]] [[package]]
name = "serde_urlencoded" name = "serde_urlencoded"
version = "0.7.1" version = "0.7.1"

View File

@ -13,6 +13,7 @@ regex = "1.7"
reqwest = { version = "*", features = ["json", "rustls-tls"], default-features = false } reqwest = { version = "*", features = ["json", "rustls-tls"], default-features = false }
serde = { version = "1", features = ["derive"] } serde = { version = "1", features = ["derive"] }
serde_json = "*" serde_json = "*"
serde_repr = "*"
tokio = { version = "1", features = ["macros", "rt-multi-thread"] } tokio = { version = "1", features = ["macros", "rt-multi-thread"] }
toml = "*" toml = "*"

View File

@ -6,15 +6,24 @@ use std::time::Duration;
use serde::Deserialize; use serde::Deserialize;
use serde_json::json; use serde_json::json;
use serde_repr::Deserialize_repr;
use tokio::task; use tokio::task;
use crate::checker::check_host; use crate::checker::check_host;
use crate::config::{CheckConfig, Config}; use crate::config::{CheckConfig, Config};
#[derive(Deserialize)] #[derive(Debug, Deserialize_repr, PartialEq)]
#[repr(u8)]
enum MouseButton {
Left = 1,
Middle = 2,
Right = 3,
}
#[derive(Debug, Deserialize, PartialEq)]
struct ClickEvent { struct ClickEvent {
name: String, name: String,
button: u8, button: MouseButton,
} }
async fn print_states(check_configs: &[CheckConfig]) { async fn print_states(check_configs: &[CheckConfig]) {
@ -81,7 +90,7 @@ async fn main() {
loop { loop {
if let Ok(click_event) = read_click_event() { if let Ok(click_event) = read_click_event() {
// Ignore click event if not left mouse button // Ignore click event if not left mouse button
if click_event.button != 1 { if click_event.button != MouseButton::Left {
continue; continue;
}; };
if let Some(click_cmd) = get_click_cmd(click_event.name).await { if let Some(click_cmd) = get_click_cmd(click_event.name).await {
@ -105,3 +114,26 @@ async fn main() {
let _r = tokio::join!(inputs, checks); let _r = tokio::join!(inputs, checks);
} }
#[cfg(test)]
mod tests {
use crate::{ClickEvent, MouseButton};
#[test]
fn test_should_deserialize_click_event() {
let actual = serde_json::from_str::<ClickEvent>(r#"{"name": "test", "button": 1}"#);
let expected = ClickEvent {
name: "test".to_string(),
button: MouseButton::Left,
};
if actual.is_err() {
println!("{:?}", actual)
}
assert!(actual.is_ok());
let actual = actual.unwrap();
assert_eq!(actual, expected);
}
}