jellyflow_runtime/io/config/
keys.rs1use std::str::FromStr;
2
3use keyboard_types::Code as KeyCode;
4use serde::{Deserialize, Deserializer, Serialize, Serializer};
5
6#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
11pub struct NodeGraphKeyCode(pub KeyCode);
12
13impl Serialize for NodeGraphKeyCode {
14 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
15 serializer.serialize_str(&self.0.to_string())
16 }
17}
18
19impl<'de> Deserialize<'de> for NodeGraphKeyCode {
20 fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
21 let s = String::deserialize(deserializer)?;
22 let code = KeyCode::from_str(&s)
23 .map_err(|_| serde::de::Error::custom(format!("unrecognized key code: {s}")))?;
24 Ok(Self(code))
25 }
26}
27
28#[derive(Debug, Default, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
30#[serde(rename_all = "snake_case")]
31pub enum NodeGraphDeleteKey {
32 None,
34 #[default]
36 Backspace,
37 Delete,
39 BackspaceOrDelete,
41}
42
43impl NodeGraphDeleteKey {
44 pub fn matches(self, key: KeyCode) -> bool {
45 match self {
46 Self::None => false,
47 Self::Backspace => key == KeyCode::Backspace,
48 Self::Delete => key == KeyCode::Delete,
49 Self::BackspaceOrDelete => matches!(key, KeyCode::Backspace | KeyCode::Delete),
50 }
51 }
52}