hyprshell_core_lib/
transfer.rs1use anyhow::Context;
2use ron::extensions::Extensions;
3use serde::{Deserialize, Serialize};
4
5#[derive(Debug, Serialize, Deserialize)]
6pub enum TransferType {
7 OpenOverview(OpenOverview),
8 OpenSwitch(OpenSwitch),
9 Switch(SwitchConfig),
10 Return(ReturnConfig),
11 Close,
12 Restart,
13}
14#[derive(Debug, Serialize, Deserialize)]
15pub struct OpenSwitch {
16 pub submap_name: String,
17 pub hide_filtered: bool,
18 pub filter_current_workspace: bool,
19 pub filter_current_monitor: bool,
20 pub filter_same_class: bool,
21 pub workspaces_per_row: u8,
22 pub direction: Direction,
23}
24
25#[derive(Debug, Serialize, Deserialize)]
26pub struct OpenOverview {
27 pub submap_name: String,
28 pub hide_filtered: bool,
29 pub filter_current_workspace: bool,
30 pub filter_current_monitor: bool,
31 pub filter_same_class: bool,
32 pub workspaces_per_row: u8,
33}
34
35#[derive(Debug, Serialize, Deserialize)]
36pub struct SwitchConfig {
37 pub direction: Direction,
38 pub workspace: bool,
39}
40
41#[derive(Debug, Serialize, Deserialize)]
42pub struct ReturnConfig {
43 pub offset: u8,
44}
45
46#[derive(Debug, Serialize, Deserialize, Eq, PartialEq)]
47pub enum Direction {
48 Right,
49 Left,
50 Up,
51 Down,
52}
53
54pub fn to_ron_string(transfer: &TransferType) -> anyhow::Result<String> {
55 ron::Options::default()
56 .with_default_extension(Extensions::IMPLICIT_SOME)
57 .with_default_extension(Extensions::UNWRAP_VARIANT_NEWTYPES)
58 .with_default_extension(Extensions::EXPLICIT_STRUCT_NAMES)
59 .to_string(transfer)
60 .context("Failed to serialize ron transfer data")
61}
62
63pub fn from_ron_string(transfer: &str) -> anyhow::Result<TransferType> {
64 ron::Options::default()
65 .with_default_extension(Extensions::IMPLICIT_SOME)
66 .with_default_extension(Extensions::UNWRAP_VARIANT_NEWTYPES)
67 .with_default_extension(Extensions::EXPLICIT_STRUCT_NAMES)
68 .from_str(transfer)
69 .context("Failed to deserialize ron transfer data")
70}