///|
pub fn markdown_report(message : MailMessage) -> String {
let mut out = ""
let title = if message.subject == "" {
"(no subject)"
} else {
message.subject
}
out = out + "# " + title + "\n\n"
out = out + "- From: " + format_address_list(message.from) + "\n"
out = out + "- To: " + format_address_list(message.to) + "\n"
out = out + "- Date: " + message.date + "\n"
out = out + "- Category: " + category_name(classify_message(message)) + "\n"
out = out + "- Parts: " + part_count(message).to_string() + "\n"
out = out + "- Attachments: " + attachment_count(message).to_string() + "\n"
out = out + "- Sender Domain: " + sender_domain(message) + "\n"
let urls = message_urls(message)
if urls.length() > 0 {
out = out + "\n## URLs\n"
for url in urls {
out = out + "- " + url + "\n"
}
}
let attachments = attachment_infos(message)
if attachments.length() > 0 {
out = out + "\n## Attachments\n"
for item in attachments {
out = out + "- " + item.filename + " (" + item.content_type + ")\n"
}
}
let findings = lint_message(message)
if findings.length() > 0 {
out = out + "\n## Findings\n"
for item in findings {
out = out +
"- " +
severity_name(item.severity) +
" " +
item.code +
": " +
item.message +
"\n"
}
}
out
}
///|
pub fn corpus_markdown_report(messages : Array[MailMessage]) -> String {
let stats = compute_stats(messages)
let mut out = "# Mail Corpus Report\n\n"
out = out + stats_summary(stats) + "\n\n"
out = out + "## Categories\n"
for pair in category_counts(messages) {
out = out + "- " + pair.0 + ": " + pair.1.to_string() + "\n"
}
out
}
///|
fn severity_name(severity : Severity) -> String {
match severity {
Info => "info"
Warning => "warning"
Error => "error"
}
}
///|
fn format_address_list(items : Array[Address]) -> String {
let mut out = ""
let mut i = 0
for item in items {
if i > 0 {
out = out + ", "
}
out = out + format_address(item)
i = i + 1
}
out
}