use anchor_lang::prelude::*;
use crate::LogLevel;
#[event]
pub struct SolTraceEvent {
pub level: LogLevel,
pub event_name: String,
pub payload: Vec<u8>,
}
impl SolTraceEvent {
pub fn new(level: LogLevel, event_name: impl Into<String>, payload: Vec<u8>) -> Self {
Self {
level,
event_name: event_name.into(),
payload,
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn new_sets_all_fields() {
let event = SolTraceEvent::new(LogLevel::Info, "test_event", vec![1, 2, 3]);
assert_eq!(event.level, LogLevel::Info);
assert_eq!(event.event_name, "test_event");
assert_eq!(event.payload, vec![1, 2, 3]);
}
#[test]
fn new_accepts_string_and_str() {
let from_str = SolTraceEvent::new(LogLevel::Warn, "from_str", vec![]);
let from_string = SolTraceEvent::new(LogLevel::Warn, "from_str".to_string(), vec![]);
assert_eq!(from_str.event_name, from_string.event_name);
}
#[test]
fn serialization_error_sentinel() {
let event = SolTraceEvent::new(LogLevel::Error, "__soltrace_serialization_error", vec![]);
assert!(event.payload.is_empty());
assert_eq!(event.event_name, "__soltrace_serialization_error");
}
}