crate_seq_ledger/types.rs
1//! Core domain types for the ledger.
2
3use semver::Version;
4
5/// Identifies the origin of a version entry.
6#[derive(Debug, Clone, Copy, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
7#[serde(rename_all = "kebab-case")]
8pub enum VersionSource {
9 /// Version detected from a git tag.
10 GitTag,
11 /// Version captured as a filesystem snapshot.
12 Snapshot,
13}
14
15/// Lifecycle state of a version entry.
16#[derive(Debug, Clone, Copy, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
17#[serde(rename_all = "kebab-case")]
18pub enum LedgerStatus {
19 /// Awaiting publication.
20 Pending,
21 /// Successfully published to a registry.
22 Published,
23 /// Deliberately skipped; will not be published.
24 Skipped,
25 /// Published then yanked from the registry.
26 Yanked,
27}
28
29/// One version tracked by the ledger.
30#[derive(Debug, Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
31pub struct LedgerEntry {
32 /// The semantic version of this entry.
33 pub version: Version,
34 /// Where this version originated.
35 pub source: VersionSource,
36 /// Tag name or snapshot hash identifying this version.
37 #[serde(rename = "ref")]
38 pub ref_: String,
39 /// Current lifecycle status.
40 pub status: LedgerStatus,
41}