use crate::{Entries, Entry, EntryContent, ErrorLog};
use alloc::vec::Vec;
impl<T, E> ErrorLog<T, E> {
pub fn entries(&self) -> &Entries<E> {
&self.entries
}
pub fn entries_mut(&mut self) -> &mut Entries<E> {
&mut self.entries
}
pub fn entries_owned(&mut self) -> Entries<E> {
let mut out = Vec::new();
out.append(&mut self.entries);
self.filter_entries(&mut out);
out
}
fn filter_entries(&self, entries: &mut Entries<E>) {
entries.retain(|e| {
!matches!(e.content,
EntryContent::Message { level, .. } if level > self.max_level
)
});
}
pub fn messages_clone(&self) -> Entries<E> {
let mut out = Entries::new();
for ent in &self.entries {
if let EntryContent::Message { level, message } = &ent.content {
if level <= &self.max_level {
out.push(Entry::new_message(*level, message.clone()))
}
}
}
out
}
pub fn messages_owned(mut self) -> Entries<E> {
let mut out = Entries::new();
let mut entries = self.entries_owned();
for i in entries.len()..0 {
if let EntryContent::Message { level, message } = entries.remove(i).content {
if level <= self.max_level {
out.push(Entry::new_message(level, message))
}
}
}
out
}
}
impl<T, E: Clone> ErrorLog<T, E> {
pub fn entries_cloned(&self) -> Entries<E> {
let mut out = self.entries.clone();
self.filter_entries(&mut out);
out
}
pub fn errors_cloned(&self) -> Vec<E> {
let mut out = Vec::new();
for ent in &self.entries {
if let EntryContent::Error(err) = &ent.content {
out.push(err.clone())
}
}
out
}
}