Skip to main content

sveltui_code/
binding.rs

1use sveltui::prelude::*;
2
3#[derive(Clone)]
4pub enum CodeBinding {
5    State(State<String>),
6    Writable(WriteSignal<String>),
7    Read(ReadSignal<String>),
8    Pair(ReadSignal<String>, WriteSignal<String>),
9    Static(String),
10}
11
12impl CodeBinding {
13    pub fn read_signal(&self) -> Option<ReadSignal<String>> {
14        match self {
15            Self::State(s) => Some(s.read()),
16            Self::Read(r) | Self::Pair(r, _) => Some(*r),
17            _ => None,
18        }
19    }
20
21    pub fn write_signal(&self) -> Option<WriteSignal<String>> {
22        match self {
23            Self::State(s) => Some(s.write()),
24            Self::Writable(w) | Self::Pair(_, w) => Some(*w),
25            _ => None,
26        }
27    }
28
29    pub fn get_text(&self) -> String {
30        match self {
31            Self::State(s) => s.get(),
32            Self::Read(r) | Self::Pair(r, _) => r.get(),
33            Self::Writable(_) => String::new(),
34            Self::Static(s) => s.clone(),
35        }
36    }
37}
38
39impl From<State<String>> for CodeBinding {
40    fn from(s: State<String>) -> Self {
41        Self::State(s)
42    }
43}
44
45impl From<WriteSignal<String>> for CodeBinding {
46    fn from(w: WriteSignal<String>) -> Self {
47        Self::Writable(w)
48    }
49}
50
51impl From<ReadSignal<String>> for CodeBinding {
52    fn from(r: ReadSignal<String>) -> Self {
53        Self::Read(r)
54    }
55}
56
57impl From<(ReadSignal<String>, WriteSignal<String>)> for CodeBinding {
58    fn from(pair: (ReadSignal<String>, WriteSignal<String>)) -> Self {
59        Self::Pair(pair.0, pair.1)
60    }
61}
62
63impl From<String> for CodeBinding {
64    fn from(s: String) -> Self {
65        Self::Static(s)
66    }
67}
68
69impl From<&str> for CodeBinding {
70    fn from(s: &str) -> Self {
71        Self::Static(s.to_string())
72    }
73}
74
75impl IntoPropOption<CodeBinding> for CodeBinding {
76    fn into_prop_option(self) -> Option<CodeBinding> {
77        Some(self)
78    }
79}
80
81impl IntoPropOption<CodeBinding> for State<String> {
82    fn into_prop_option(self) -> Option<CodeBinding> {
83        Some(CodeBinding::State(self))
84    }
85}
86
87impl IntoPropOption<CodeBinding> for WriteSignal<String> {
88    fn into_prop_option(self) -> Option<CodeBinding> {
89        Some(CodeBinding::Writable(self))
90    }
91}
92
93impl IntoPropOption<CodeBinding> for ReadSignal<String> {
94    fn into_prop_option(self) -> Option<CodeBinding> {
95        Some(CodeBinding::Read(self))
96    }
97}
98
99impl IntoPropOption<CodeBinding> for (ReadSignal<String>, WriteSignal<String>) {
100    fn into_prop_option(self) -> Option<CodeBinding> {
101        Some(CodeBinding::Pair(self.0, self.1))
102    }
103}
104
105impl IntoPropOption<CodeBinding> for String {
106    fn into_prop_option(self) -> Option<CodeBinding> {
107        Some(CodeBinding::Static(self))
108    }
109}
110
111impl IntoPropOption<CodeBinding> for &'static str {
112    fn into_prop_option(self) -> Option<CodeBinding> {
113        Some(CodeBinding::Static(self.to_string()))
114    }
115}