Instantiate Duration on deserialization

pull/53/head
Takashi Kokubun 2 years ago
parent 63e24b4dc5
commit 16094de2cf
No known key found for this signature in database
GPG Key ID: 6FFC433B12EE23DD

116
Cargo.lock generated

@ -119,6 +119,19 @@ version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
[[package]]
name = "chrono"
version = "0.4.19"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "670ad68c9088c2a963aaa298cb369688cf3f9465ce5e2d4ca10e6e0098a1ce73"
dependencies = [
"libc",
"num-integer",
"num-traits",
"serde",
"winapi",
]
[[package]]
name = "concurrent-queue"
version = "1.2.2"
@ -128,6 +141,41 @@ dependencies = [
"cache-padded",
]
[[package]]
name = "darling"
version = "0.13.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d0d720b8683f8dd83c65155f0530560cba68cd2bf395f6513a483caee57ff7f4"
dependencies = [
"darling_core",
"darling_macro",
]
[[package]]
name = "darling_core"
version = "0.13.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7a340f241d2ceed1deb47ae36c4144b2707ec7dd0b649f894cb39bb595986324"
dependencies = [
"fnv",
"ident_case",
"proc-macro2",
"quote",
"strsim",
"syn",
]
[[package]]
name = "darling_macro"
version = "0.13.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "72c41b3b7352feb3211a0d743dc5700a4e3b60f51bd2b368892d1e0f9a95f44b"
dependencies = [
"darling_core",
"quote",
"syn",
]
[[package]]
name = "derivative"
version = "2.2.0"
@ -215,6 +263,12 @@ dependencies = [
"instant",
]
[[package]]
name = "fnv"
version = "1.0.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
[[package]]
name = "funty"
version = "1.2.0"
@ -361,6 +415,12 @@ version = "2.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4"
[[package]]
name = "ident_case"
version = "1.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39"
[[package]]
name = "indexmap"
version = "1.7.0"
@ -483,6 +543,25 @@ dependencies = [
"memoffset",
]
[[package]]
name = "num-integer"
version = "0.1.44"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d2cc698a63b549a70bc047073d2949cce27cd1c7b0a4a862d08a8031bc2801db"
dependencies = [
"autocfg",
"num-traits",
]
[[package]]
name = "num-traits"
version = "0.2.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290"
dependencies = [
"autocfg",
]
[[package]]
name = "object"
version = "0.27.1"
@ -601,6 +680,12 @@ version = "0.1.21"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7ef03e0a2b150c7a90d01faf6254c9c48a41e95fb2a8c2ac1c6f0d2b9aefc342"
[[package]]
name = "rustversion"
version = "1.0.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f2cc38e8fa666e2de3c4aba7edeb5ffc5246c1c2ed0e3d17e560aeeba736b23f"
[[package]]
name = "ryu"
version = "1.0.9"
@ -655,6 +740,30 @@ dependencies = [
"syn",
]
[[package]]
name = "serde_with"
version = "1.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ad6056b4cb69b6e43e3a0f055def223380baecc99da683884f205bf347f7c4b3"
dependencies = [
"chrono",
"rustversion",
"serde",
"serde_with_macros",
]
[[package]]
name = "serde_with_macros"
version = "1.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "12e47be9471c72889ebafb5e14d5ff930d89ae7a67bbdb5f8abb564f845a927e"
dependencies = [
"darling",
"proc-macro2",
"quote",
"syn",
]
[[package]]
name = "serde_yaml"
version = "0.8.23"
@ -689,6 +798,12 @@ version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
[[package]]
name = "strsim"
version = "0.10.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
[[package]]
name = "swayipc"
version = "2.7.2"
@ -863,6 +978,7 @@ dependencies = [
"nix 0.23.1",
"serde",
"serde_json",
"serde_with",
"serde_yaml",
"swayipc",
"x11",

@ -17,6 +17,7 @@ log = "0.4.14"
nix = "0.23.1"
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"
serde_with = { version = "1.11", features = ["chrono"] }
serde_yaml = "0.8"
swayipc = "2.7.2"
x11_rs = { package = "x11", version = "2.19.1", features = ["xlib"] }

@ -1,6 +1,8 @@
use crate::config::key::deserialize_key;
use evdev::Key;
use serde::Deserialize;
use serde_with::{serde_as, DurationMilliSeconds};
use std::time::Duration;
// Values in `modmap.remap`
#[derive(Clone, Debug, Deserialize)]
@ -11,16 +13,18 @@ pub enum KeyAction {
MultiPurposeKey(MultiPurposeKey),
}
#[serde_as]
#[derive(Clone, Debug, Deserialize)]
pub struct MultiPurposeKey {
#[serde(deserialize_with = "deserialize_key")]
pub held: Key,
#[serde(deserialize_with = "deserialize_key")]
pub alone: Key,
#[serde(default = "default_alone_timeout_millis")]
pub alone_timeout_millis: u64,
#[serde_as(as = "DurationMilliSeconds")]
#[serde(default = "default_alone_timeout", rename = "alone_timeout_millis")]
pub alone_timeout: Duration,
}
fn default_alone_timeout_millis() -> u64 {
1000
fn default_alone_timeout() -> Duration {
Duration::from_millis(1000)
}

@ -10,7 +10,7 @@ use lazy_static::lazy_static;
use log::debug;
use std::collections::HashMap;
use std::error::Error;
use std::time::{Duration, Instant};
use std::time::Instant;
pub struct EventHandler {
device: VirtualDevice,
@ -92,9 +92,7 @@ impl EventHandler {
MultiPurposeKeyState {
held: multi_purpose_key.held,
alone: multi_purpose_key.alone,
alone_timeout_at: Some(
Instant::now() + Duration::from_millis(multi_purpose_key.alone_timeout_millis),
),
alone_timeout_at: Some(Instant::now() + multi_purpose_key.alone_timeout),
},
);
return vec![]; // delay the press

Loading…
Cancel
Save