semifold_core/
changeset.rs1use std::fmt;
2
3use semver::Version;
4use serde::Serialize;
5
6use crate::{PackageId, VersionSourceId};
7
8#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd, Serialize)]
10#[serde(transparent)]
11pub struct ChangesetId(String);
12
13impl ChangesetId {
14 #[must_use]
15 pub fn new(value: impl Into<String>) -> Self {
16 Self(value.into())
17 }
18
19 #[must_use]
20 pub fn as_str(&self) -> &str {
21 &self.0
22 }
23}
24
25impl fmt::Display for ChangesetId {
26 fn fmt(&self, formatter: &mut fmt::Formatter<'_>) -> fmt::Result {
27 formatter.write_str(&self.0)
28 }
29}
30
31#[derive(Clone, Copy, Debug, Eq, Ord, PartialEq, PartialOrd, Serialize)]
33#[serde(rename_all = "lowercase")]
34pub enum BumpLevel {
35 Unchanged,
36 Patch,
37 Minor,
38 Major,
39}
40
41impl fmt::Display for BumpLevel {
42 fn fmt(&self, formatter: &mut fmt::Formatter<'_>) -> fmt::Result {
43 formatter.write_str(match self {
44 Self::Unchanged => "unchanged",
45 Self::Patch => "patch",
46 Self::Minor => "minor",
47 Self::Major => "major",
48 })
49 }
50}
51
52#[derive(Clone, Debug, Eq, Ord, PartialEq, PartialOrd, Serialize)]
54#[serde(tag = "kind", rename_all = "snake_case")]
55pub enum ReleaseReason {
56 Changeset {
57 changeset: ChangesetId,
58 },
59 DependencyPropagation {
60 dependency: PackageId,
61 next_version: Version,
62 },
63 SharedVersionPropagation {
64 source: VersionSourceId,
65 },
66}
67
68#[derive(Clone, Debug, Eq, Ord, PartialEq, PartialOrd, Serialize)]
70#[serde(tag = "kind", rename_all = "snake_case")]
71pub enum PlanWarning {
72 NonPatchBumpOnPrerelease {
73 package: PackageId,
74 requested: BumpLevel,
75 },
76}