1pub mod items;
9
10use items::MetadataItem;
11use items::MetadataItems;
12use items::Text;
13use jiff::tz::TimeZone;
14
15#[derive(Debug, Clone, Default)]
18pub struct Metadata {
19 #[doc(hidden)]
21 pub items: MetadataItems,
22}
23
24impl Metadata {
25 #[must_use]
27 pub fn new() -> Metadata {
28 Metadata { items: Vec::new() }
29 }
30
31 #[must_use]
33 pub fn from_mdi(mdi: MetadataItem) -> Metadata {
34 let items = vec![mdi];
35
36 Metadata { items }
37 }
38
39 #[must_use]
44 pub fn from_metadata(md: &Metadata) -> Metadata {
45 let mut metadata = Metadata::new();
46 for mdi in &md.items {
47 match mdi {
48 MetadataItem::TxnSetChecksum(_) => (),
49 _ => metadata.push(mdi.clone()),
50 }
51 }
52 metadata
53 }
54
55 pub fn push(&mut self, mdi: MetadataItem) {
57 self.items.push(mdi);
58 }
59
60 #[must_use]
62 pub fn text(&self, tz: TimeZone) -> String {
63 let ts = self
64 .items
65 .iter()
66 .flat_map(|item| {
67 let mut vs = item.text(tz.clone());
68 vs.push(String::default());
70 vs
71 })
72 .collect::<Vec<String>>();
73 ts.join("\n")
74 }
75}
76
77#[derive(Debug, Clone)]
79pub struct Checksum {
80 pub algorithm: String,
82 pub value: String,
84}