channel.rs

 1use std::env;
 2
 3use lazy_static::lazy_static;
 4
 5lazy_static! {
 6    pub static ref RELEASE_CHANNEL_NAME: String = if cfg!(debug_assertions) {
 7        env::var("ZED_RELEASE_CHANNEL")
 8            .unwrap_or_else(|_| include_str!("../../zed/RELEASE_CHANNEL").to_string())
 9    } else {
10        include_str!("../../zed/RELEASE_CHANNEL").to_string()
11    };
12    pub static ref RELEASE_CHANNEL: ReleaseChannel = match RELEASE_CHANNEL_NAME.as_str() {
13        "dev" => ReleaseChannel::Dev,
14        "preview" => ReleaseChannel::Preview,
15        "stable" => ReleaseChannel::Stable,
16        _ => panic!("invalid release channel {}", *RELEASE_CHANNEL_NAME),
17    };
18}
19
20#[derive(Copy, Clone, PartialEq, Eq, Default)]
21pub enum ReleaseChannel {
22    #[default]
23    Dev,
24    Preview,
25    Stable,
26}
27
28impl ReleaseChannel {
29    pub fn display_name(&self) -> &'static str {
30        match self {
31            ReleaseChannel::Dev => "Zed Dev",
32            ReleaseChannel::Preview => "Zed Preview",
33            ReleaseChannel::Stable => "Zed",
34        }
35    }
36
37    pub fn dev_name(&self) -> &'static str {
38        match self {
39            ReleaseChannel::Dev => "dev",
40            ReleaseChannel::Preview => "preview",
41            ReleaseChannel::Stable => "stable",
42        }
43    }
44
45    pub fn url_scheme(&self) -> &'static str {
46        match self {
47            ReleaseChannel::Dev => "zed-dev://",
48            ReleaseChannel::Preview => "zed-preview://",
49            ReleaseChannel::Stable => "zed://",
50        }
51    }
52
53    pub fn link_prefix(&self) -> &'static str {
54        match self {
55            ReleaseChannel::Dev => "https://zed.dev/dev/",
56            ReleaseChannel::Preview => "https://zed.dev/preview/",
57            ReleaseChannel::Stable => "https://zed.dev/",
58        }
59    }
60}
61
62pub fn parse_zed_link(link: &str) -> Option<&str> {
63    for release in [
64        ReleaseChannel::Dev,
65        ReleaseChannel::Preview,
66        ReleaseChannel::Stable,
67    ] {
68        if let Some(stripped) = link.strip_prefix(release.link_prefix()) {
69            return Some(stripped);
70        }
71        if let Some(stripped) = link.strip_prefix(release.url_scheme()) {
72            return Some(stripped);
73        }
74    }
75    None
76}