crev_data/proof/
package_info.rs

1use crate::proof;
2
3use crev_common::serde::{as_base64, from_base64};
4use derive_builder::Builder;
5pub use semver::Version;
6use serde::{Deserialize, Serialize};
7
8#[derive(Clone, Debug, Builder, Serialize, Deserialize, PartialEq, Hash, Eq)]
9pub struct PackageId {
10    pub source: String,
11    pub name: String,
12}
13
14#[derive(Clone, Debug, Builder, Serialize, Deserialize, PartialEq, Hash, Eq)]
15pub struct PackageVersionId {
16    #[serde(flatten)]
17    pub id: PackageId,
18    pub version: Version,
19}
20
21impl PackageVersionId {
22    #[must_use]
23    pub fn new(source: String, name: String, version: Version) -> Self {
24        Self {
25            id: PackageId { source, name },
26            version,
27        }
28    }
29}
30
31#[derive(Clone, Debug, Builder, Serialize, Deserialize, PartialEq)]
32pub struct PackageInfo {
33    #[serde(flatten)]
34    pub id: PackageVersionId,
35
36    #[serde(skip_serializing_if = "proof::equals_default", default)]
37    pub revision: String,
38    #[serde(
39        rename = "revision-type",
40        skip_serializing_if = "proof::equals_default_revision_type",
41        default = "proof::default_revision_type"
42    )]
43    pub revision_type: String,
44
45    #[serde(serialize_with = "as_base64", deserialize_with = "from_base64")]
46    pub digest: Vec<u8>,
47    #[serde(
48        skip_serializing_if = "proof::equals_default_digest_type",
49        default = "proof::default_digest_type"
50    )]
51    pub digest_type: String,
52}