zellij_utils/plugin_api/
resize.rs

1pub 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}