mod collector;
mod context;
mod event;
mod handler;
pub use collector::*;
pub use context::*;
pub use event::*;
pub use handler::*;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub struct VestigiumId(u64);
impl VestigiumId {
#[inline]
pub fn new(id: u64) -> Self {
VestigiumId(id)
}
#[inline]
pub fn generate() -> Self {
use core::sync::atomic::{AtomicU64, Ordering};
static COUNTER: AtomicU64 = AtomicU64::new(1);
VestigiumId(COUNTER.fetch_add(1, Ordering::Relaxed))
}
#[inline]
pub fn value(&self) -> u64 {
self.0
}
}
impl Default for VestigiumId {
fn default() -> Self {
Self::generate()
}
}
impl core::fmt::Display for VestigiumId {
fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
write!(f, "{:016x}", self.0)
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub struct SpatiumId(u64);
impl SpatiumId {
#[inline]
pub fn new(id: u64) -> Self {
SpatiumId(id)
}
#[inline]
pub fn generate() -> Self {
use core::sync::atomic::{AtomicU64, Ordering};
static COUNTER: AtomicU64 = AtomicU64::new(1);
SpatiumId(COUNTER.fetch_add(1, Ordering::Relaxed))
}
#[inline]
pub fn value(&self) -> u64 {
self.0
}
}
impl Default for SpatiumId {
fn default() -> Self {
Self::generate()
}
}
impl core::fmt::Display for SpatiumId {
fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
write!(f, "{:016x}", self.0)
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Default)]
pub enum Gradus {
Vestigium,
Debug,
#[default]
Info,
Monitum,
Error,
}
impl Gradus {
#[inline]
pub fn name(&self) -> &'static str {
match self {
Gradus::Vestigium => "TRACE",
Gradus::Debug => "DEBUG",
Gradus::Info => "INFO",
Gradus::Monitum => "WARN",
Gradus::Error => "ERROR",
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_vestigium_id_unique() {
let id1 = VestigiumId::generate();
let id2 = VestigiumId::generate();
assert_ne!(id1, id2);
}
#[test]
fn test_vestigium_id_display() {
let id = VestigiumId::new(255);
let display = alloc::format!("{id}");
assert_eq!(display, "00000000000000ff");
}
#[test]
fn test_spatium_id_unique() {
let id1 = SpatiumId::generate();
let id2 = SpatiumId::generate();
assert_ne!(id1, id2);
}
#[test]
fn test_gradus_ordering() {
assert!(Gradus::Vestigium < Gradus::Debug);
assert!(Gradus::Debug < Gradus::Info);
assert!(Gradus::Info < Gradus::Monitum);
assert!(Gradus::Monitum < Gradus::Error);
}
}