pub mod items;
use items::MetadataItem;
use items::MetadataItems;
use items::Text;
use jiff::tz::TimeZone;
use serde::Serialize;
#[derive(Serialize, Debug, Clone, Default)]
pub struct Metadata {
#[doc(hidden)]
pub items: MetadataItems,
}
impl Metadata {
#[must_use]
pub fn new() -> Metadata {
Metadata { items: Vec::new() }
}
#[must_use]
pub fn from_mdi(mdi: MetadataItem) -> Metadata {
let items = vec![mdi];
Metadata { items }
}
#[must_use]
pub fn from_metadata(md: &Metadata) -> Metadata {
let mut metadata = Metadata::new();
for mdi in &md.items {
match mdi {
MetadataItem::TxnSetChecksum(_) => (),
_ => metadata.push(mdi.clone()),
}
}
metadata
}
pub fn push(&mut self, mdi: MetadataItem) {
self.items.push(mdi);
}
#[must_use]
#[allow(clippy::needless_pass_by_value)]
pub fn text(&self, tz: TimeZone) -> String {
let ts = self
.items
.iter()
.flat_map(|item| {
let mut vs = item.text(tz.clone());
vs.push(String::default());
vs
})
.collect::<Vec<String>>();
ts.join("\n")
}
#[must_use]
pub fn is_empty(&self) -> bool {
self.items.is_empty()
}
}
#[derive(Serialize, Debug, Clone)]
pub struct Checksum {
pub algorithm: String,
pub value: String,
}