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