tauri_plugin_widgets/
config.rs1use serde::Deserialize;
4
5#[derive(Debug, Clone, Copy, Deserialize, PartialEq, Eq)]
9#[serde(rename_all = "camelCase")]
10pub enum TransportKind {
11 AppGroup,
13 UserDefaults,
15 WidgetContainer,
17 Auto,
19}
20
21impl Default for TransportKind {
22 fn default() -> Self {
23 Self::AppGroup
25 }
26}
27
28impl TransportKind {
29 pub fn parse(s: &str) -> Option<Self> {
31 match s.trim().to_ascii_lowercase().as_str() {
32 "appgroup" | "app_group" | "app-group" => Some(Self::AppGroup),
33 "userdefaults" | "user_defaults" | "user-defaults" | "defaults" => {
34 Some(Self::UserDefaults)
35 }
36 "widgetcontainer" | "widget_container" | "widget-container" | "container" => {
37 Some(Self::WidgetContainer)
38 }
39 "auto" => Some(Self::Auto),
40 _ => None,
41 }
42 }
43
44 pub fn as_str(self) -> &'static str {
45 match self {
46 Self::AppGroup => "appGroup",
47 Self::UserDefaults => "userDefaults",
48 Self::WidgetContainer => "widgetContainer",
49 Self::Auto => "auto",
50 }
51 }
52}
53
54#[derive(Debug, Clone, Deserialize, Default)]
55#[serde(rename_all = "camelCase")]
56pub struct WidgetsPluginConfig {
57 #[serde(default)]
58 pub transport: TransportKind,
59 pub app_group: Option<String>,
61 pub extension_bundle_id: Option<String>,
63}
64
65pub fn env_transport_override() -> Option<TransportKind> {
67 std::env::var("WIDGET_TRANSPORT")
68 .ok()
69 .filter(|s| !s.is_empty())
70 .and_then(|s| TransportKind::parse(&s))
71}
72
73pub fn effective_transport(cfg: &WidgetsPluginConfig) -> TransportKind {
75 env_transport_override().unwrap_or(cfg.transport)
76}