Skip to main content

dix_diff/
model.rs

1use std::num::NonZeroUsize;
2
3use crate::Version;
4
5#[derive(Debug, Eq, PartialEq)]
6pub struct Diff {
7  pub name:                 String,
8  pub versions:             Vec<VersionDiff>,
9  pub status:               DiffStatus,
10  pub has_omitted_versions: bool,
11}
12
13#[derive(Debug, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)]
14pub struct VersionAmount {
15  pub version: Version,
16  pub amount:  NonZeroUsize,
17}
18
19impl VersionAmount {
20  #[must_use]
21  pub fn new(version: impl Into<Version>, amount: NonZeroUsize) -> Self {
22    Self {
23      version: version.into(),
24      amount,
25    }
26  }
27
28  #[must_use]
29  pub fn try_new(version: impl Into<Version>, amount: usize) -> Option<Self> {
30    Some(Self::new(version, NonZeroUsize::new(amount)?))
31  }
32}
33
34#[derive(Debug, Clone, Eq, PartialEq, Ord, PartialOrd)]
35pub enum VersionDiff {
36  Removed(VersionAmount),
37  Added(VersionAmount),
38  Changed {
39    old: VersionAmount,
40    new: VersionAmount,
41  },
42  AmountChanged {
43    version:    Version,
44    old_amount: NonZeroUsize,
45    new_amount: NonZeroUsize,
46  },
47}
48
49#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
50pub enum DiffStatus {
51  Changed,
52  Mixed,
53  Upgraded,
54  Downgraded,
55  Added,
56  Removed,
57}