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, PartialEq, Eq, Serialize, Deserialize)]
55pub enum Provider {
56    Github,
57    Gitlab,
58    Gitea,
59    WebScraper,
60    Direct,
61}
62
63impl FromStr for Provider {
64    type Err = String;
65
66    fn from_str(s: &str) -> Result<Self, Self::Err> {
67        match s.to_lowercase().as_str() {
68            "github" => Ok(Provider::Github),
69            "gitlab" => Ok(Provider::Gitlab),
70            "gitea" => Ok(Provider::Gitea),
71            "scraper" => Ok(Provider::WebScraper),
72            "direct" => Ok(Provider::Direct),
73            _ => Err(format!("Unknown provider: {}", s)),
74        }
75    }
76}
77
78impl std::fmt::Display for Provider {
79    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
80        match self {
81            Provider::Github => write!(f, "github"),
82            Provider::Gitlab => write!(f, "gitlab"),
83            Provider::Gitea => write!(f, "gitea"),
84            Provider::WebScraper => write!(f, "scraper"),
85            Provider::Direct => write!(f, "direct"),
86        }
87    }
88}