mod batch;
mod event;
mod helpers;
mod log;
mod metric;
#[cfg(test)]
mod batch_test;
#[cfg(test)]
mod event_test;
#[cfg(test)]
mod log_test;
#[cfg(test)]
mod metric_test;
pub use batch::{encode_batch, encode_batch_into};
pub use event::{encode_event, encode_event_data, encode_event_data_into};
pub use log::{encode_log_data, encode_log_data_into, encode_log_entry};
pub use metric::{encode_metric_data, encode_metric_data_into, encode_metric_entry};
pub const API_KEY_LENGTH: usize = 16;
pub const UUID_LENGTH: usize = 16;
pub const IPV6_LENGTH: usize = 16;
pub const DEFAULT_VERSION: u8 = 100;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
#[repr(u8)]
pub enum SchemaType {
Unknown = 0,
Event = 1,
Log = 2,
Metric = 3,
}
impl SchemaType {
#[inline]
pub const fn as_u8(self) -> u8 {
self as u8
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
#[repr(u8)]
pub enum EventType {
#[default]
Unknown = 0,
Track = 1,
Identify = 2,
Group = 3,
Alias = 4,
Enrich = 5,
Context = 6,
}
impl EventType {
#[inline]
pub const fn as_u8(self) -> u8 {
self as u8
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
#[repr(u8)]
pub enum LogEventType {
Unknown = 0,
#[default]
Log = 1,
Enrich = 2,
}
impl LogEventType {
#[inline]
pub const fn as_u8(self) -> u8 {
self as u8
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
#[repr(u8)]
pub enum LogLevel {
Emergency = 0,
Alert = 1,
Critical = 2,
Error = 3,
Warning = 4,
Notice = 5,
#[default]
Info = 6,
Debug = 7,
Trace = 8,
}
impl LogLevel {
#[inline]
pub const fn as_u8(self) -> u8 {
self as u8
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
#[repr(u8)]
pub enum MetricType {
#[default]
Unknown = 0,
Gauge = 1,
Counter = 2,
Histogram = 3,
}
impl MetricType {
#[inline]
pub const fn as_u8(self) -> u8 {
self as u8
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
#[repr(u8)]
pub enum Temporality {
#[default]
Unspecified = 0,
Cumulative = 1,
Delta = 2,
}
impl Temporality {
#[inline]
pub const fn as_u8(self) -> u8 {
self as u8
}
}
pub struct EventParams<'a> {
pub event_type: EventType,
pub timestamp: u64,
pub service: Option<&'a str>,
pub device_id: Option<&'a [u8; UUID_LENGTH]>,
pub session_id: Option<&'a [u8; UUID_LENGTH]>,
pub event_name: Option<&'a str>,
pub payload: Option<&'a [u8]>,
}
pub struct LogEntryParams<'a> {
pub event_type: LogEventType,
pub session_id: Option<&'a [u8; UUID_LENGTH]>,
pub level: LogLevel,
pub timestamp: u64,
pub source: Option<&'a str>,
pub service: Option<&'a str>,
pub payload: Option<&'a [u8]>,
}
pub struct MetricEntryParams<'a> {
pub metric_type: MetricType,
pub timestamp: u64,
pub name: &'a str,
pub value: f64,
pub source: Option<&'a str>,
pub service: Option<&'a str>,
pub labels: &'a [LabelParam<'a>],
pub temporality: Temporality,
pub histogram: Option<&'a HistogramParams>,
pub session_id: Option<&'a [u8; UUID_LENGTH]>,
}
pub struct LabelParam<'a> {
pub key: &'a str,
pub value: &'a str,
}
#[derive(Debug, Clone)]
pub struct HistogramParams {
pub count: u64,
pub sum: f64,
pub min: f64,
pub max: f64,
pub buckets: Vec<(f64, u64)>,
}
pub struct BatchParams<'a> {
pub api_key: &'a [u8; API_KEY_LENGTH],
pub schema_type: SchemaType,
pub version: u8,
pub batch_id: u64,
pub data: &'a [u8],
}