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