zellij_utils/plugin_api/
resize.rs1pub use super::generated_api::api::resize::{
2 MoveDirection as ProtobufMoveDirection, Resize as ProtobufResize, ResizeAction,
3 ResizeDirection, ResizeDirection as ProtobufResizeDirection,
4};
5use crate::data::{Direction, Resize, ResizeStrategy};
6
7use std::convert::TryFrom;
8
9impl TryFrom<ProtobufResize> for Resize {
10 type Error = &'static str;
11 fn try_from(protobuf_resize: ProtobufResize) -> Result<Self, &'static str> {
12 if protobuf_resize.direction.is_some() {
13 return Err("Resize cannot have a direction");
14 }
15 match ResizeAction::from_i32(protobuf_resize.resize_action) {
16 Some(ResizeAction::Increase) => Ok(Resize::Increase),
17 Some(ResizeAction::Decrease) => Ok(Resize::Decrease),
18 None => Err("No resize action for the given index"),
19 }
20 }
21}
22
23impl TryFrom<Resize> for ProtobufResize {
24 type Error = &'static str;
25 fn try_from(resize: Resize) -> Result<Self, &'static str> {
26 Ok(ProtobufResize {
27 resize_action: match resize {
28 Resize::Increase => ResizeAction::Increase as i32,
29 Resize::Decrease => ResizeAction::Decrease as i32,
30 },
31 direction: None,
32 })
33 }
34}
35
36impl TryFrom<ProtobufResize> for ResizeStrategy {
37 type Error = &'static str;
38 fn try_from(protobuf_resize: ProtobufResize) -> Result<Self, &'static str> {
39 let direction = match protobuf_resize
40 .direction
41 .and_then(|r| ResizeDirection::from_i32(r))
42 {
43 Some(ResizeDirection::Left) => Some(Direction::Left),
44 Some(ResizeDirection::Right) => Some(Direction::Right),
45 Some(ResizeDirection::Up) => Some(Direction::Up),
46 Some(ResizeDirection::Down) => Some(Direction::Down),
47 None => None,
48 };
49 let resize = match ResizeAction::from_i32(protobuf_resize.resize_action) {
50 Some(ResizeAction::Increase) => Resize::Increase,
51 Some(ResizeAction::Decrease) => Resize::Decrease,
52 None => return Err("No resize action for the given index"),
53 };
54 Ok(ResizeStrategy {
55 direction,
56 resize,
57 invert_on_boundaries: false,
58 })
59 }
60}
61
62impl TryFrom<ResizeStrategy> for ProtobufResize {
63 type Error = &'static str;
64 fn try_from(resize_strategy: ResizeStrategy) -> Result<Self, &'static str> {
65 Ok(ProtobufResize {
66 resize_action: match resize_strategy.resize {
67 Resize::Increase => ResizeAction::Increase as i32,
68 Resize::Decrease => ResizeAction::Decrease as i32,
69 },
70 direction: match resize_strategy.direction {
71 Some(Direction::Left) => Some(ResizeDirection::Left as i32),
72 Some(Direction::Right) => Some(ResizeDirection::Right as i32),
73 Some(Direction::Up) => Some(ResizeDirection::Up as i32),
74 Some(Direction::Down) => Some(ResizeDirection::Down as i32),
75 None => None,
76 },
77 })
78 }
79}
80
81impl TryFrom<ProtobufMoveDirection> for Direction {
82 type Error = &'static str;
83 fn try_from(protobuf_move_direction: ProtobufMoveDirection) -> Result<Self, &'static str> {
84 match ResizeDirection::from_i32(protobuf_move_direction.direction) {
85 Some(ResizeDirection::Left) => Ok(Direction::Left),
86 Some(ResizeDirection::Right) => Ok(Direction::Right),
87 Some(ResizeDirection::Up) => Ok(Direction::Up),
88 Some(ResizeDirection::Down) => Ok(Direction::Down),
89 None => Err("No direction for the given index"),
90 }
91 }
92}
93
94impl TryFrom<Direction> for ProtobufMoveDirection {
95 type Error = &'static str;
96 fn try_from(direction: Direction) -> Result<Self, &'static str> {
97 Ok(ProtobufMoveDirection {
98 direction: match direction {
99 Direction::Left => ResizeDirection::Left as i32,
100 Direction::Right => ResizeDirection::Right as i32,
101 Direction::Up => ResizeDirection::Up as i32,
102 Direction::Down => ResizeDirection::Down as i32,
103 },
104 })
105 }
106}
107
108impl TryFrom<ProtobufResizeDirection> for Direction {
109 type Error = &'static str;
110 fn try_from(protobuf_resize_direction: ProtobufResizeDirection) -> Result<Self, &'static str> {
111 match protobuf_resize_direction {
112 ProtobufResizeDirection::Left => Ok(Direction::Left),
113 ProtobufResizeDirection::Right => Ok(Direction::Right),
114 ProtobufResizeDirection::Up => Ok(Direction::Up),
115 ProtobufResizeDirection::Down => Ok(Direction::Down),
116 }
117 }
118}
119
120impl TryFrom<Direction> for ProtobufResizeDirection {
121 type Error = &'static str;
122 fn try_from(direction: Direction) -> Result<Self, &'static str> {
123 Ok(match direction {
124 Direction::Left => ProtobufResizeDirection::Left,
125 Direction::Right => ProtobufResizeDirection::Right,
126 Direction::Up => ProtobufResizeDirection::Up,
127 Direction::Down => ProtobufResizeDirection::Down,
128 })
129 }
130}