use evident::event::{entry::EventEntry, origin::Origin};
use crate::log_id::LogId;
use super::{
event_entry::{AddonKind, LogEventEntry},
msg::LogMsg,
LOGGER,
};
#[derive(Default, Clone, PartialEq, Eq)]
pub struct IntermediaryLogEvent {
pub(crate) entry: LogEventEntry,
}
impl evident::event::intermediary::IntermediaryEvent<LogId, LogMsg, LogEventEntry>
for IntermediaryLogEvent
{
fn new(event_id: LogId, msg: Option<impl Into<LogMsg>>, origin: Origin) -> Self {
IntermediaryLogEvent {
entry: LogEventEntry::new(event_id, msg, origin),
}
}
fn get_entry(&self) -> &LogEventEntry {
&self.entry
}
fn take_entry(&mut self) -> LogEventEntry {
std::mem::take(&mut self.entry)
}
}
impl std::fmt::Debug for IntermediaryLogEvent {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
f.debug_struct("LogId-IntermEvent")
.field("event_id", &self.entry.event_id)
.field("entry_id", &self.entry.entry_id)
.field("origin", &self.entry.origin)
.finish()
}
}
impl IntermediaryLogEvent {
pub fn get_event_id(&self) -> LogId {
self.entry.event_id
}
pub fn get_entry(&self) -> &LogEventEntry {
&self.entry
}
pub fn add_addon(mut self, kind: AddonKind) -> Self {
if let Some(filter) = LOGGER.get_filter() {
if !filter.allow_addon(self.get_event_id(), &self.entry.origin, &kind) {
return self;
}
}
match kind {
AddonKind::Info(msg) => self.entry.infos.push(msg),
AddonKind::Debug(msg) => self.entry.debugs.push(msg),
AddonKind::Trace(msg) => self.entry.traces.push(msg),
AddonKind::Related(finalized_event) => self.entry.related.push(finalized_event),
#[cfg(feature = "fmt")]
AddonKind::FmtInfo(fmt_msg) => self.entry.fmt_infos.push(fmt_msg),
#[cfg(feature = "fmt")]
AddonKind::FmtDebug(fmt_msg) => self.entry.fmt_debugs.push(fmt_msg),
#[cfg(feature = "fmt")]
AddonKind::FmtTrace(fmt_msg) => self.entry.fmt_traces.push(fmt_msg),
#[cfg(feature = "hint_note")]
AddonKind::Hint(msg) => self.entry.hints.push(msg),
#[cfg(all(feature = "hint_note", feature = "fmt"))]
AddonKind::FmtHint(fmt_msg) => self.entry.fmt_hints.push(fmt_msg),
#[cfg(feature = "hint_note")]
AddonKind::Note(msg) => self.entry.notes.push(msg),
#[cfg(all(feature = "hint_note", feature = "fmt"))]
AddonKind::FmtNote(fmt_msg) => self.entry.fmt_notes.push(fmt_msg),
#[cfg(feature = "diagnostics")]
AddonKind::Diagnostic(diag) => self.entry.diagnostics.push(diag),
#[cfg(all(feature = "diagnostics", feature = "fmt"))]
AddonKind::FmtDiagnostic(fmt_diag) => self.entry.fmt_diagnostics.push(fmt_diag),
#[cfg(feature = "payloads")]
AddonKind::Payload(payload) => self.entry.payloads.push(payload),
#[cfg(all(feature = "payloads", feature = "fmt"))]
AddonKind::FmtPayload(fmt_payload) => self.entry.fmt_payloads.push(fmt_payload),
}
self
}
}