Skip to main content

upstream_rs/models/common/
enums.rs

1use clap::ValueEnum;
2use serde::{Deserialize, Serialize};
3use std::fmt;
4use std::str::FromStr;
5
6#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, ValueEnum)]
7pub enum Filetype {
8    AppImage,
9    MacApp,
10    MacDmg,
11    Archive,
12    Compressed,
13    Binary,
14    WinExe,
15    Checksum,
16    Auto, // select automatically
17}
18
19impl fmt::Display for Filetype {
20    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
21        let s = match self {
22            Filetype::AppImage => "AppImage",
23            Filetype::MacApp => "Mac app bundle",
24            Filetype::MacDmg => "macOS disk image",
25            Filetype::Archive => "Compressed archive",
26            Filetype::Compressed => "Compressed file",
27            Filetype::Binary => "Binary",
28            Filetype::WinExe => "Windows executable",
29            Filetype::Checksum => "Checksum",
30            Filetype::Auto => "Auto",
31        };
32
33        write!(f, "{s}")
34    }
35}
36
37#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, ValueEnum)]
38pub enum Channel {
39    Stable,
40    Preview,
41    Nightly,
42}
43
44impl fmt::Display for Channel {
45    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
46        match self {
47            Channel::Stable => write!(f, "Stable"),
48            Channel::Preview => write!(f, "Preview"),
49            Channel::Nightly => write!(f, "Nightly"),
50        }
51    }
52}
53
54#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, ValueEnum)]
55pub enum TrustMode {
56    None,
57    BestEffort,
58    Checksum,
59    Signature,
60    All,
61}
62
63impl fmt::Display for TrustMode {
64    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
65        let s = match self {
66            TrustMode::None => "none",
67            TrustMode::BestEffort => "best-effort",
68            TrustMode::Checksum => "checksum",
69            TrustMode::Signature => "signature",
70            TrustMode::All => "all",
71        };
72        write!(f, "{s}")
73    }
74}
75
76#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
77pub enum Provider {
78    Github,
79    Gitlab,
80    Gitea,
81    WebScraper,
82    Direct,
83}
84
85impl FromStr for Provider {
86    type Err = String;
87
88    fn from_str(s: &str) -> Result<Self, Self::Err> {
89        match s.to_lowercase().as_str() {
90            "github" => Ok(Provider::Github),
91            "gitlab" => Ok(Provider::Gitlab),
92            "gitea" => Ok(Provider::Gitea),
93            "scraper" => Ok(Provider::WebScraper),
94            "direct" => Ok(Provider::Direct),
95            _ => Err(format!("Unknown provider: {}", s)),
96        }
97    }
98}
99
100impl std::fmt::Display for Provider {
101    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
102        match self {
103            Provider::Github => write!(f, "github"),
104            Provider::Gitlab => write!(f, "gitlab"),
105            Provider::Gitea => write!(f, "gitea"),
106            Provider::WebScraper => write!(f, "scraper"),
107            Provider::Direct => write!(f, "direct"),
108        }
109    }
110}
111
112#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, Default)]
113#[serde(rename_all = "snake_case")]
114pub enum CompressionLevel {
115    None,
116    Low,
117    #[default]
118    High,
119}