provenant/output_schema/
file_reference.rs1use 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}