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, 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}