quanttide_devops/contract/
platform.rs1use serde::{Deserialize, Serialize};
4use std::fmt;
5
6#[derive(Debug, Clone, Serialize, Deserialize)]
10#[serde(rename_all = "snake_case")]
11pub struct Platform {
12 #[serde(default)]
13 pub source_control: SourceControl,
14 #[serde(default)]
15 pub pipeline: Pipeline,
16 #[serde(default)]
17 pub artifact_registry: Registry,
18}
19
20impl Default for Platform {
21 fn default() -> Self {
22 Self {
23 source_control: SourceControl::Github,
24 pipeline: Pipeline::GithubActions,
25 artifact_registry: Registry::None,
26 }
27 }
28}
29
30#[derive(Debug, Clone, PartialEq, Default, Serialize, Deserialize)]
32#[cfg_attr(feature = "clap", derive(clap::ValueEnum))]
33#[serde(rename_all = "snake_case")]
34pub enum SourceControl {
35 #[default]
36 Github,
37 Gitlab,
38 Gitee,
39}
40
41#[derive(Debug, Clone, PartialEq, Default, Serialize, Deserialize)]
43#[cfg_attr(feature = "clap", derive(clap::ValueEnum))]
44#[serde(rename_all = "snake_case")]
45pub enum Pipeline {
46 #[default]
47 #[serde(rename = "github_actions")]
48 GithubActions,
49 #[serde(rename = "gitlab_ci")]
50 GitlabCi,
51 Jenkins,
52}
53
54#[derive(Debug, Clone, PartialEq, Default, Serialize, Deserialize)]
58#[cfg_attr(feature = "clap", derive(clap::ValueEnum))]
59#[serde(rename_all = "snake_case")]
60pub enum Registry {
61 Crates,
62 #[serde(rename = "pypi")]
63 PyPI,
64 #[serde(rename = "pubdev")]
65 PubDev,
66 Npm,
67 #[serde(rename = "github_releases")]
68 GitHubReleases,
69 Docker,
70 #[default]
71 #[serde(other)]
72 None,
73}
74
75impl fmt::Display for Registry {
76 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
77 match self {
78 Self::Crates => write!(f, "crates.io"),
79 Self::PyPI => write!(f, "PyPI"),
80 Self::PubDev => write!(f, "pub.dev"),
81 Self::Npm => write!(f, "npm"),
82 Self::GitHubReleases => write!(f, "GitHub Releases"),
83 Self::Docker => write!(f, "Docker"),
84 Self::None => write!(f, "(none)"),
85 }
86 }
87}
88
89#[cfg(test)]
90mod tests {
91 use super::*;
92
93 #[test]
94 fn test_registry_display() {
95 assert_eq!(Registry::Crates.to_string(), "crates.io");
96 assert_eq!(Registry::PyPI.to_string(), "PyPI");
97 assert_eq!(Registry::PubDev.to_string(), "pub.dev");
98 assert_eq!(Registry::Npm.to_string(), "npm");
99 assert_eq!(Registry::GitHubReleases.to_string(), "GitHub Releases");
100 assert_eq!(Registry::Docker.to_string(), "Docker");
101 assert_eq!(Registry::None.to_string(), "(none)");
102 }
103}