Skip to main content

provenant/output_schema/
file_reference.rs

1use serde::{Deserialize, Serialize};
2use std::collections::HashMap;
3
4use super::serde_helpers::serialize_optional_map_as_object;
5
6#[derive(Serialize, Deserialize, Debug, Clone)]
7pub struct OutputFileReference {
8    pub path: String,
9    #[serde(skip_serializing_if = "Option::is_none")]
10    pub size: Option<u64>,
11    #[serde(skip_serializing_if = "Option::is_none")]
12    pub sha1: Option<String>,
13    #[serde(skip_serializing_if = "Option::is_none")]
14    pub md5: Option<String>,
15    #[serde(skip_serializing_if = "Option::is_none")]
16    pub sha256: Option<String>,
17    #[serde(skip_serializing_if = "Option::is_none")]
18    pub sha512: Option<String>,
19    #[serde(default, serialize_with = "serialize_optional_map_as_object")]
20    pub extra_data: Option<HashMap<String, serde_json::Value>>,
21}
22
23impl From<&crate::models::FileReference> for OutputFileReference {
24    fn from(value: &crate::models::FileReference) -> Self {
25        Self {
26            path: value.path.clone(),
27            size: value.size,
28            sha1: value.sha1.as_ref().map(|d| d.as_hex()),
29            md5: value.md5.as_ref().map(|d| d.as_hex()),
30            sha256: value.sha256.as_ref().map(|d| d.as_hex()),
31            sha512: value.sha512.as_ref().map(|d| d.as_hex()),
32            extra_data: value.extra_data.clone(),
33        }
34    }
35}
36
37impl TryFrom<&OutputFileReference> for crate::models::FileReference {
38    type Error = String;
39    fn try_from(value: &OutputFileReference) -> Result<Self, Self::Error> {
40        Ok(Self {
41            path: value.path.clone(),
42            size: value.size,
43            sha1: value
44                .sha1
45                .as_ref()
46                .map(|s| crate::models::Sha1Digest::from_hex(s))
47                .transpose()
48                .map_err(|e| format!("invalid sha1: {}", e))?,
49            md5: value
50                .md5
51                .as_ref()
52                .map(|s| crate::models::Md5Digest::from_hex(s))
53                .transpose()
54                .map_err(|e| format!("invalid md5: {}", e))?,
55            sha256: value
56                .sha256
57                .as_ref()
58                .map(|s| crate::models::Sha256Digest::from_hex(s))
59                .transpose()
60                .map_err(|e| format!("invalid sha256: {}", e))?,
61            sha512: value
62                .sha512
63                .as_ref()
64                .map(|s| crate::models::Sha512Digest::from_hex(s))
65                .transpose()
66                .map_err(|e| format!("invalid sha512: {}", e))?,
67            extra_data: value.extra_data.clone(),
68        })
69    }
70}