tackler_api/metadata/
items.rsuse crate::filters::FilterDefinition;
use crate::metadata::Checksum;
#[doc(hidden)]
pub type MetadataItems = Vec<MetadataItem>;
#[doc(hidden)]
pub trait Text: std::fmt::Debug {
#[must_use]
fn text(&self) -> Vec<String>;
}
#[doc(hidden)]
#[derive(Debug, Clone)]
pub enum MetadataItem {
#[doc(hidden)]
TxnSetChecksum(TxnSetChecksum),
#[doc(hidden)]
AccountSelectorChecksum(AccountSelectorChecksum),
#[doc(hidden)]
GitInputReference(GitInputReference),
#[doc(hidden)]
TxnFilterDescription(TxnFilterDescription),
}
impl MetadataItem {
pub const ITEM_PAD: usize = 15;
}
impl Text for MetadataItem {
fn text(&self) -> Vec<String> {
match self {
Self::GitInputReference(gif) => gif.text(),
Self::TxnSetChecksum(tscs) => tscs.text(),
Self::AccountSelectorChecksum(asc) => asc.text(),
Self::TxnFilterDescription(tfd) => tfd.text(),
}
}
}
#[derive(Debug, Clone)]
pub struct TxnSetChecksum {
pub size: usize,
pub hash: Checksum,
}
impl Text for TxnSetChecksum {
fn text(&self) -> Vec<String> {
let pad = MetadataItem::ITEM_PAD;
vec![
format!("Txn Set Checksum"),
format!("{:>pad$} : {}", self.hash.algorithm, &self.hash.value),
format!("{:>pad$} : {}", "Set size", self.size),
]
}
}
#[derive(Debug, Clone)]
pub struct AccountSelectorChecksum {
pub hash: Checksum,
}
impl Text for AccountSelectorChecksum {
fn text(&self) -> Vec<String> {
let pad = MetadataItem::ITEM_PAD;
vec![
format!("Account Selector Checksum"),
format!("{:>pad$} : {}", self.hash.algorithm, &self.hash.value),
]
}
}
#[derive(Debug, Clone)]
pub struct ReportTimezone {
pub timezone: String,
}
impl Text for ReportTimezone {
fn text(&self) -> Vec<String> {
let pad = MetadataItem::ITEM_PAD;
vec![
"Report Time Zone".to_string(),
format!("{:>pad$} : {}", "TZ name", &self.timezone),
]
}
}
#[derive(Debug, Clone)]
pub struct TxnFilterDescription {
#[doc(hidden)]
txn_filter_def: FilterDefinition,
}
impl TxnFilterDescription {
#[must_use]
pub fn from(tf: FilterDefinition) -> TxnFilterDescription {
TxnFilterDescription { txn_filter_def: tf }
}
}
impl Text for TxnFilterDescription {
fn text(&self) -> Vec<String> {
format!("{}", self.txn_filter_def)
.trim_end()
.split("\n")
.map(String::from)
.collect::<Vec<String>>()
}
}
#[derive(Debug, Clone)]
pub struct GitInputReference {
pub commit: String,
pub reference: Option<String>,
pub dir: String,
pub suffix: String,
pub message: String,
}
impl Text for GitInputReference {
fn text(&self) -> Vec<String> {
let pad = MetadataItem::ITEM_PAD;
vec![
format!("Git Storage"),
format!("{:>pad$} : {}", "commit", self.commit),
format!(
"{:>pad$} : {}",
"reference",
self.reference
.as_ref()
.unwrap_or(&"FIXED by commit".to_string())
),
format!("{:>pad$} : {}", "directory", self.dir),
format!("{:>pad$} : .{}", "suffix", self.suffix),
format!("{:>pad$} : {}", "message", self.message.trim()),
]
}
}