1use serde::{Deserialize, Serialize};
9use std::fmt;
10use std::str::FromStr;
11
12#[derive(
14 Debug, Clone, Copy, Default, Deserialize, Serialize, PartialEq, Eq, PartialOrd, Ord, Hash,
15)]
16#[serde(rename_all = "lowercase")]
17pub enum Bump {
18 #[default]
20 None,
21 Patch,
23 Minor,
25 Major,
27}
28
29impl fmt::Display for Bump {
30 fn fmt(&self, formatter: &mut fmt::Formatter<'_>) -> fmt::Result {
31 formatter.write_str(match self {
32 Self::None => "none",
33 Self::Patch => "patch",
34 Self::Minor => "minor",
35 Self::Major => "major",
36 })
37 }
38}
39
40impl FromStr for Bump {
41 type Err = String;
42
43 fn from_str(value: &str) -> std::result::Result<Self, Self::Err> {
44 match value {
45 "patch" => Ok(Self::Patch),
46 "minor" => Ok(Self::Minor),
47 "major" => Ok(Self::Major),
48 _ => Err(format!("expected major, minor, or patch; got {value}")),
49 }
50 }
51}
52
53#[derive(Debug, Clone, Copy, Deserialize, Serialize, PartialEq, Eq)]
55#[serde(rename_all = "lowercase")]
56pub enum ProjectionMode {
57 Committed,
59 Injected,
61 None,
63}
64
65#[derive(Debug, Clone, Copy, Default, Deserialize, Serialize, PartialEq, Eq)]
67#[serde(rename_all = "lowercase")]
68pub enum Pre1BumpMapping {
69 Component,
71 #[default]
73 Compatibility,
74}
75
76#[derive(Debug, Clone, Copy, Default, Deserialize, Serialize, PartialEq, Eq)]
78#[serde(rename_all = "lowercase")]
79pub enum ReleaseUnitDisposition {
80 #[default]
82 Managed,
83 Suspended,
85}
86
87#[derive(Debug, Clone, Copy, Deserialize, Serialize, PartialEq, Eq)]
89#[serde(rename_all = "lowercase")]
90pub enum TagRole {
91 Primary,
93 Projection,
95}
96
97#[derive(Debug, Clone, Copy, Deserialize, Serialize, PartialEq, Eq)]
99#[serde(rename_all = "kebab-case")]
100pub enum TagPhase {
101 BeforePublication,
103 AfterPublication,
105}
106
107impl fmt::Display for TagPhase {
108 fn fmt(&self, formatter: &mut fmt::Formatter<'_>) -> fmt::Result {
109 formatter.write_str(match self {
110 Self::BeforePublication => "before-publication",
111 Self::AfterPublication => "after-publication",
112 })
113 }
114}
115
116#[derive(Debug, Clone, Copy, Deserialize, Serialize, PartialEq, Eq, Hash)]
118#[serde(rename_all = "lowercase")]
119pub enum Adapter {
120 Npm,
122 Cargo,
124 Pub,
126 Python,
128 Msbuild,
130 Go,
132 Json,
134 Toml,
136 Yaml,
138}
139
140impl Adapter {
141 pub fn requires_pointer(self) -> bool {
143 matches!(self, Self::Json | Self::Toml | Self::Yaml)
144 }
145
146 pub fn ecosystem(self) -> Option<&'static str> {
148 match self {
149 Self::Npm => Some("npm"),
150 Self::Cargo => Some("cargo"),
151 Self::Pub => Some("pub"),
152 Self::Python => Some("python"),
153 Self::Msbuild => Some("msbuild"),
154 Self::Go => Some("go"),
155 Self::Json | Self::Toml | Self::Yaml => None,
156 }
157 }
158}