tauri_plugin_dialog/
models.rs1use serde::{Deserialize, Deserializer, Serialize, Serializer};
6
7#[non_exhaustive]
9#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash, Default)]
10pub enum MessageDialogKind {
11 #[default]
13 Info,
14 Warning,
16 Error,
18}
19
20impl<'de> Deserialize<'de> for MessageDialogKind {
21 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
22 where
23 D: Deserializer<'de>,
24 {
25 let s = String::deserialize(deserializer)?;
26 Ok(match s.to_lowercase().as_str() {
27 "info" => MessageDialogKind::Info,
28 "warning" => MessageDialogKind::Warning,
29 "error" => MessageDialogKind::Error,
30 _ => MessageDialogKind::Info,
31 })
32 }
33}
34
35impl Serialize for MessageDialogKind {
36 fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
37 where
38 S: Serializer,
39 {
40 match self {
41 Self::Info => serializer.serialize_str("info"),
42 Self::Warning => serializer.serialize_str("warning"),
43 Self::Error => serializer.serialize_str("error"),
44 }
45 }
46}
47
48#[non_exhaustive]
50#[derive(Debug, Default, Clone, Serialize, Deserialize)]
51pub enum MessageDialogButtons {
52 #[default]
53 Ok,
55 OkCancel,
57 YesNo,
59 YesNoCancel,
61 OkCustom(String),
63 OkCancelCustom(String, String),
65 YesNoCancelCustom(String, String, String),
67}
68
69#[derive(Debug, Default, Clone, PartialEq, Eq, Deserialize, Serialize)]
71pub enum MessageDialogResult {
72 Yes,
74 No,
76 Ok,
78 #[default]
80 Cancel,
81 #[serde(untagged)]
83 Custom(String),
84}
85
86#[cfg(desktop)]
87impl From<rfd::MessageDialogResult> for MessageDialogResult {
88 fn from(result: rfd::MessageDialogResult) -> Self {
89 match result {
90 rfd::MessageDialogResult::Yes => Self::Yes,
91 rfd::MessageDialogResult::No => Self::No,
92 rfd::MessageDialogResult::Ok => Self::Ok,
93 rfd::MessageDialogResult::Cancel => Self::Cancel,
94 rfd::MessageDialogResult::Custom(s) => Self::Custom(s),
95 }
96 }
97}
98
99impl From<String> for MessageDialogResult {
100 fn from(value: String) -> Self {
101 match value.as_str() {
102 "Yes" => Self::Yes,
103 "No" => Self::No,
104 "Ok" => Self::Ok,
105 "Cancel" => Self::Cancel,
106 _ => Self::Custom(value),
107 }
108 }
109}