intentional_core/
model.rs1use 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, Deserialize, Serialize, PartialEq, Eq, Hash)]
67#[serde(rename_all = "lowercase")]
68pub enum Adapter {
69 Npm,
71 Cargo,
73 Pub,
75 Python,
77 Msbuild,
79 Go,
81 Json,
83 Toml,
85 Yaml,
87}
88
89impl Adapter {
90 pub fn requires_pointer(self) -> bool {
92 matches!(self, Self::Json | Self::Toml | Self::Yaml)
93 }
94
95 pub fn ecosystem(self) -> Option<&'static str> {
97 match self {
98 Self::Npm => Some("npm"),
99 Self::Cargo => Some("cargo"),
100 Self::Pub => Some("pub"),
101 Self::Python => Some("python"),
102 Self::Msbuild => Some("msbuild"),
103 Self::Go => Some("go"),
104 Self::Json | Self::Toml | Self::Yaml => None,
105 }
106 }
107}