use serde::{Deserialize, Serialize};
pub const SCHEMA_VERSION: u32 = 1;
pub const MAX_CAPTURE_BYTES: usize = 64 * 1024 * 1024;
pub const MAX_CAPTURE_EVENTS: u64 = 100_000;
pub const MAX_RECORD_BYTES: usize = 256 * 1024;
pub const TERMINAL_RESERVE: usize = 1024;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum EventKind {
SessionStart,
SessionEnd,
TraceEnd,
Input,
Action,
State,
Render,
Resize,
JobStarted,
JobFinished,
JobRejected,
RpcMessage,
ProviderLifecycle,
ProviderStderr,
HttpRequest,
HttpResponse,
Cache,
Config,
ExternalCommand,
Error,
Panic,
}
#[derive(Debug, Default, Clone, Copy, PartialEq, Eq)]
pub enum ContentPolicy {
#[default]
Metadata,
Full,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct Limits {
pub max_bytes: usize,
pub max_events: u64,
pub max_record_bytes: usize,
}
impl Default for Limits {
fn default() -> Self {
Self {
max_bytes: MAX_CAPTURE_BYTES,
max_events: MAX_CAPTURE_EVENTS,
max_record_bytes: MAX_RECORD_BYTES,
}
}
}
impl Limits {
pub fn valid(&self) -> bool {
self.max_bytes >= TERMINAL_RESERVE * 2
&& self.max_bytes <= MAX_CAPTURE_BYTES
&& self.max_events > 0
&& self.max_events <= MAX_CAPTURE_EVENTS
&& self.max_record_bytes > 0
&& self.max_record_bytes <= MAX_RECORD_BYTES
}
}
#[derive(Debug, Default, Clone, Copy)]
pub struct TraceOptions {
pub content: ContentPolicy,
pub limits: Limits,
}