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 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}