upstream_rs/models/common/
enums.rs1use 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, }
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}