zellij_utils/plugin_api/
style.rs1use super::generated_api::api::style::{
2 color::Payload as ProtobufColorPayload, Color as ProtobufColor, ColorType as ProtobufColorType,
3 Palette as ProtobufPalette, RgbColorPayload as ProtobufRgbColorPayload, Style as ProtobufStyle,
4 ThemeHue as ProtobufThemeHue,
5};
6use crate::data::{Palette, PaletteColor, Style, ThemeHue};
7use crate::errors::prelude::*;
8
9use std::convert::TryFrom;
10
11impl TryFrom<ProtobufStyle> for Style {
12 type Error = &'static str;
13 fn try_from(protobuf_style: ProtobufStyle) -> Result<Self, &'static str> {
14 Ok(Style {
15 colors: protobuf_style
16 .palette
17 .ok_or("malformed style payload")?
18 .try_into()?,
19 rounded_corners: protobuf_style.rounded_corners,
20 hide_session_name: protobuf_style.hide_session_name,
21 })
22 }
23}
24
25impl TryFrom<Style> for ProtobufStyle {
26 type Error = &'static str;
27 fn try_from(style: Style) -> Result<Self, &'static str> {
28 Ok(ProtobufStyle {
29 palette: Some(style.colors.try_into()?),
30 rounded_corners: style.rounded_corners,
31 hide_session_name: style.hide_session_name,
32 })
33 }
34}
35
36impl TryFrom<ProtobufPalette> for Palette {
37 type Error = &'static str;
38 fn try_from(protobuf_palette: ProtobufPalette) -> Result<Self, &'static str> {
39 Ok(Palette {
40 theme_hue: ProtobufThemeHue::from_i32(protobuf_palette.theme_hue)
41 .ok_or("malformed theme_hue payload for Palette")?
42 .try_into()?,
43 fg: protobuf_palette
44 .fg
45 .ok_or("malformed palette payload")?
46 .try_into()?,
47 bg: protobuf_palette
48 .bg
49 .ok_or("malformed palette payload")?
50 .try_into()?,
51 black: protobuf_palette
52 .black
53 .ok_or("malformed palette payload")?
54 .try_into()?,
55 red: protobuf_palette
56 .red
57 .ok_or("malformed palette payload")?
58 .try_into()?,
59 green: protobuf_palette
60 .green
61 .ok_or("malformed palette payload")?
62 .try_into()?,
63 yellow: protobuf_palette
64 .yellow
65 .ok_or("malformed palette payload")?
66 .try_into()?,
67 blue: protobuf_palette
68 .blue
69 .ok_or("malformed palette payload")?
70 .try_into()?,
71 magenta: protobuf_palette
72 .magenta
73 .ok_or("malformed palette payload")?
74 .try_into()?,
75 cyan: protobuf_palette
76 .cyan
77 .ok_or("malformed palette payload")?
78 .try_into()?,
79 white: protobuf_palette
80 .white
81 .ok_or("malformed palette payload")?
82 .try_into()?,
83 orange: protobuf_palette
84 .orange
85 .ok_or("malformed palette payload")?
86 .try_into()?,
87 gray: protobuf_palette
88 .gray
89 .ok_or("malformed palette payload")?
90 .try_into()?,
91 purple: protobuf_palette
92 .purple
93 .ok_or("malformed palette payload")?
94 .try_into()?,
95 gold: protobuf_palette
96 .gold
97 .ok_or("malformed palette payload")?
98 .try_into()?,
99 silver: protobuf_palette
100 .silver
101 .ok_or("malformed palette payload")?
102 .try_into()?,
103 pink: protobuf_palette
104 .pink
105 .ok_or("malformed palette payload")?
106 .try_into()?,
107 brown: protobuf_palette
108 .brown
109 .ok_or("malformed palette payload")?
110 .try_into()?,
111 ..Default::default()
112 })
113 }
114}
115
116impl TryFrom<Palette> for ProtobufPalette {
117 type Error = &'static str;
118 fn try_from(palette: Palette) -> Result<Self, &'static str> {
119 let theme_hue: ProtobufThemeHue = palette
120 .theme_hue
121 .try_into()
122 .map_err(|_| "malformed payload for palette")?;
123 Ok(ProtobufPalette {
124 theme_hue: theme_hue as i32,
125 fg: Some(palette.fg.try_into()?),
126 bg: Some(palette.bg.try_into()?),
127 black: Some(palette.black.try_into()?),
128 red: Some(palette.red.try_into()?),
129 green: Some(palette.green.try_into()?),
130 yellow: Some(palette.yellow.try_into()?),
131 blue: Some(palette.blue.try_into()?),
132 magenta: Some(palette.magenta.try_into()?),
133 cyan: Some(palette.cyan.try_into()?),
134 white: Some(palette.white.try_into()?),
135 orange: Some(palette.orange.try_into()?),
136 gray: Some(palette.gray.try_into()?),
137 purple: Some(palette.purple.try_into()?),
138 gold: Some(palette.gold.try_into()?),
139 silver: Some(palette.silver.try_into()?),
140 pink: Some(palette.pink.try_into()?),
141 brown: Some(palette.brown.try_into()?),
142 ..Default::default()
143 })
144 }
145}
146
147impl TryFrom<ProtobufColor> for PaletteColor {
148 type Error = &'static str;
149 fn try_from(protobuf_color: ProtobufColor) -> Result<Self, &'static str> {
150 match ProtobufColorType::from_i32(protobuf_color.color_type) {
151 Some(ProtobufColorType::Rgb) => match protobuf_color.payload {
152 Some(ProtobufColorPayload::RgbColorPayload(rgb_color_payload)) => {
153 Ok(PaletteColor::Rgb((
154 rgb_color_payload.red as u8,
155 rgb_color_payload.green as u8,
156 rgb_color_payload.blue as u8,
157 )))
158 },
159 _ => Err("malformed payload for Rgb color"),
160 },
161 Some(ProtobufColorType::EightBit) => match protobuf_color.payload {
162 Some(ProtobufColorPayload::EightBitColorPayload(eight_bit_payload)) => {
163 Ok(PaletteColor::EightBit(eight_bit_payload as u8))
164 },
165 _ => Err("malformed payload for 8bit color"),
166 },
167 None => Err("malformed payload for Color"),
168 }
169 }
170}
171
172impl TryFrom<PaletteColor> for ProtobufColor {
173 type Error = &'static str;
174 fn try_from(color: PaletteColor) -> Result<Self, &'static str> {
175 match color {
176 PaletteColor::Rgb((red, green, blue)) => {
177 let red = red as u32;
178 let green = green as u32;
179 let blue = blue as u32;
180 Ok(ProtobufColor {
181 color_type: ProtobufColorType::Rgb as i32,
182 payload: Some(ProtobufColorPayload::RgbColorPayload(
183 ProtobufRgbColorPayload { red, green, blue },
184 )),
185 })
186 },
187 PaletteColor::EightBit(color) => Ok(ProtobufColor {
188 color_type: ProtobufColorType::EightBit as i32,
189 payload: Some(ProtobufColorPayload::EightBitColorPayload(color as u32)),
190 }),
191 }
192 }
193}
194
195impl TryFrom<ThemeHue> for ProtobufThemeHue {
196 type Error = &'static str;
197 fn try_from(theme_hue: ThemeHue) -> Result<Self, &'static str> {
198 match theme_hue {
199 ThemeHue::Light => Ok(ProtobufThemeHue::Light),
200 ThemeHue::Dark => Ok(ProtobufThemeHue::Dark),
201 }
202 }
203}
204
205impl TryFrom<ProtobufThemeHue> for ThemeHue {
206 type Error = &'static str;
207 fn try_from(protobuf_theme_hue: ProtobufThemeHue) -> Result<Self, &'static str> {
208 match protobuf_theme_hue {
209 ProtobufThemeHue::Light => Ok(ThemeHue::Light),
210 ProtobufThemeHue::Dark => Ok(ThemeHue::Dark),
211 }
212 }
213}