///|
pub struct MailboxIndex {
messages : Array[MailMessage]
domains : Array[String]
stats : MailStats
} derive(Eq, Debug)
///|
pub fn build_index(messages : Array[MailMessage]) -> MailboxIndex {
{ messages, domains: all_domains(messages), stats: compute_stats(messages) }
}
///|
pub fn index_search(
index : MailboxIndex,
input : MailQuery,
) -> Array[MailMessage] {
filter_messages(index.messages, input)
}
///|
pub fn index_domain_count(index : MailboxIndex) -> Int {
index.domains.length()
}
///|
pub fn index_subjects(index : MailboxIndex) -> Array[String] {
let out : Array[String] = []
for message in index.messages {
out.push(message.subject)
}
out
}
///|
pub fn index_report(index : MailboxIndex) -> String {
"MailboxIndex messages=" +
index.messages.length().to_string() +
" domains=" +
index.domains.length().to_string() +
" " +
stats_summary(index.stats)
}