///|
/// Debug trace item recorded by EventBus while publishing events.
pub(all) enum TraceKind {
  TracePublish
  TraceMiddleware
  TraceHandler
  TraceSchedule
  TraceError
} derive(Eq, Debug)

///|
pub(all) struct TraceEntry {
  index : Int
  kind : TraceKind
  event_name : String
  actor : String
  message : String
} derive(Eq, Debug)

///|
pub fn TraceEntry::new(
  index : Int,
  kind : TraceKind,
  event_name : String,
  actor : String,
  message : String,
) -> TraceEntry {
  { index, kind, event_name, actor, message }
}

///|
pub fn trace_summary(entries : Array[TraceEntry]) -> Array[String] {
  let out : Array[String] = []
  for entry in entries {
    out.push(
      entry.index.to_string() +
      ":" +
      entry.event_name +
      ":" +
      entry.actor +
      ":" +
      entry.message,
    )
  }
  out
}