tui_gradient_block/structs/
border_symbols.rs

1use derive_builder::Builder;
2use getset::{Getters, Setters};
3use tui_rule::Set;
4#[cfg_attr(
5    feature = "serde",
6    derive(serde::Serialize, serde::Deserialize)
7)]
8#[derive(Getters, Setters, Builder, Clone, Debug)]
9pub struct SegmentSet {
10    pub top: Set,
11    pub bottom: Set,
12    pub right: Set,
13    pub left: Set,
14}
15#[cfg_attr(
16    feature = "serde",
17    derive(serde::Serialize, serde::Deserialize)
18)]
19#[derive(Getters, Setters, Builder, Clone, Debug)]
20pub struct Corners {
21    pub bottom_right: char,
22    pub bottom_left: char,
23    pub top_left: char,
24    pub top_right: char,
25}
26impl SegmentSet {
27    #[cfg(feature = "serde")]
28    pub fn from_json(path: &str) -> Result<Self, E> {
29        crate::generate_from_json!(path, Self)
30    }
31    pub fn from_ratatui_set(
32        set: ratatui::symbols::border::Set,
33    ) -> Self {
34        macro_rules! parsed {
35            ($s:expr) => {
36                $s.parse::<char>().unwrap_or(' ')
37            };
38        }
39        let top = parsed!(set.horizontal_top);
40        let bottom = parsed!(set.horizontal_bottom);
41        let right = parsed!(set.vertical_right);
42        let left = parsed!(set.vertical_left);
43        let top_right = parsed!(set.top_right);
44        let top_left = parsed!(set.top_left);
45        let bottom_right = parsed!(set.bottom_right);
46        let bottom_left = parsed!(set.bottom_left);
47        Self {
48            top: Set {
49                start: top_left,
50                rep_1: top,
51                center: top,
52                rep_2: top,
53                end: top_right,
54            },
55            bottom: Set {
56                start: bottom_left,
57                rep_1: bottom,
58                center: bottom,
59                rep_2: bottom,
60                end: bottom_right,
61            },
62            right: Set {
63                start: top_right,
64                rep_1: right,
65                center: right,
66                rep_2: right,
67                end: bottom_right,
68            },
69            left: Set {
70                start: top_left,
71                rep_1: left,
72                center: left,
73                rep_2: left,
74                end: bottom_left,
75            },
76        }
77    }
78}