Skip to main content

gpui_query/core/
network_mode.rs

1//! Network mode configuration (forward compatibility).
2
3use serde::{Deserialize, Serialize};
4
5/// Controls fetch behavior based on network connectivity.
6///
7/// Note: In v2, this is defined for forward compatibility. The actual
8/// network detection is not yet implemented.
9#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Serialize, Deserialize)]
10pub enum NetworkMode {
11    /// Only fetch when online (default).
12    #[default]
13    Online,
14    /// Always try to fetch, even when offline.
15    Always,
16    /// Use cached data first, fetch when online.
17    OfflineFirst,
18}
19
20impl NetworkMode {
21    /// Human-readable label.
22    pub fn label(self) -> &'static str {
23        match self {
24            Self::Online => "Online",
25            Self::Always => "Always",
26            Self::OfflineFirst => "Offline first",
27        }
28    }
29}
30
31#[cfg(test)]
32mod tests {
33    use super::*;
34
35    #[test]
36    fn network_mode_labels() {
37        assert_eq!(NetworkMode::Online.label(), "Online");
38        assert_eq!(NetworkMode::Always.label(), "Always");
39        assert_eq!(NetworkMode::OfflineFirst.label(), "Offline first");
40    }
41
42    #[test]
43    fn network_mode_default_is_online() {
44        assert_eq!(NetworkMode::default(), NetworkMode::Online);
45    }
46
47    #[test]
48    fn network_mode_serde_roundtrip() {
49        for mode in [
50            NetworkMode::Online,
51            NetworkMode::Always,
52            NetworkMode::OfflineFirst,
53        ] {
54            let json = serde_json::to_string(&mode).unwrap();
55            let back: NetworkMode = serde_json::from_str(&json).unwrap();
56            assert_eq!(back, mode);
57        }
58    }
59
60    #[test]
61    fn network_mode_equality() {
62        assert_eq!(NetworkMode::Online, NetworkMode::Online);
63        assert_ne!(NetworkMode::Online, NetworkMode::Always);
64        assert_ne!(NetworkMode::Always, NetworkMode::OfflineFirst);
65    }
66}