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}