Skip to main content

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}