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