parse_style/serde/
ratatui.rs

1//! (De)serializing [`ratatui_core`] types
2use serde::{Deserialize, Serialize, de::Deserializer, ser::Serializer};
3
4/// A module for use via `#[serde(with)]` for serializing & deserializing
5/// [`ratatui_core::style::Style`] values as style strings.
6///
7/// Use it like so:
8///
9/// ```
10/// use serde::{Deserialize, Serialize};
11///
12/// #[derive(Deserialize, Serialize)]
13/// struct MyStruct {
14///     #[serde(with = "parse_style::serde::ratatui::style")]
15///     style: ratatui_core::style::Style,
16/// }
17/// ```
18pub mod style {
19    use super::*;
20    use ratatui_core::style::Style;
21
22    pub fn serialize<S: Serializer>(style: &Style, serializer: S) -> Result<S::Ok, S::Error> {
23        crate::Style::from(*style).serialize(serializer)
24    }
25
26    pub fn deserialize<'de, D: Deserializer<'de>>(deserializer: D) -> Result<Style, D::Error> {
27        crate::Style::deserialize(deserializer).map(Style::from)
28    }
29}
30
31/// A module for use via `#[serde(with)]` for serializing & deserializing
32/// [`ratatui_core::style::Color`] values as color words and RGB codes.
33///
34/// Use it like so:
35///
36/// ```
37/// use serde::{Deserialize, Serialize};
38///
39/// #[derive(Deserialize, Serialize)]
40/// struct MyStruct {
41///     #[serde(with = "parse_style::serde::ratatui::color")]
42///     color: ratatui_core::style::Color,
43/// }
44/// ```
45pub mod color {
46    use super::*;
47    use ratatui_core::style::Color;
48
49    pub fn serialize<S: Serializer>(color: &Color, serializer: S) -> Result<S::Ok, S::Error> {
50        crate::Color::from(*color).serialize(serializer)
51    }
52
53    pub fn deserialize<'de, D: Deserializer<'de>>(deserializer: D) -> Result<Color, D::Error> {
54        crate::Color::deserialize(deserializer).map(Color::from)
55    }
56}