use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
#[derive(Default)]
pub enum TransferMode {
#[default]
ReportEvents,
ReturnAsStream,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "lowercase")]
#[derive(Default)]
pub enum StreamFormat {
#[default]
Json,
Proto,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "lowercase")]
#[derive(Default)]
pub enum StreamCompression {
#[default]
None,
Gzip,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "lowercase")]
#[derive(Default)]
pub enum TracingBackend {
#[default]
Auto,
Chrome,
System,
}
#[derive(Debug, Clone, Serialize, Default)]
#[serde(rename_all = "camelCase")]
pub struct StartParams {
#[serde(skip_serializing_if = "Option::is_none")]
pub categories: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub options: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub buffer_usage_reporting_interval: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub transfer_mode: Option<TransferMode>,
#[serde(skip_serializing_if = "Option::is_none")]
pub stream_format: Option<StreamFormat>,
#[serde(skip_serializing_if = "Option::is_none")]
pub stream_compression: Option<StreamCompression>,
#[serde(skip_serializing_if = "Option::is_none")]
pub trace_config: Option<TraceConfig>,
#[serde(skip_serializing_if = "Option::is_none")]
pub perfetto_config: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub tracing_backend: Option<TracingBackend>,
}
impl StartParams {
pub fn new() -> Self {
Self::default()
}
#[must_use]
pub fn categories(mut self, categories: impl Into<String>) -> Self {
self.categories = Some(categories.into());
self
}
#[must_use]
pub fn transfer_mode(mut self, mode: TransferMode) -> Self {
self.transfer_mode = Some(mode);
self
}
#[must_use]
pub fn stream_format(mut self, format: StreamFormat) -> Self {
self.stream_format = Some(format);
self
}
#[must_use]
pub fn trace_config(mut self, config: TraceConfig) -> Self {
self.trace_config = Some(config);
self
}
}
#[derive(Debug, Clone, Serialize, Default)]
#[serde(rename_all = "camelCase")]
pub struct TraceConfig {
#[serde(skip_serializing_if = "Option::is_none")]
pub record_mode: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub trace_buffer_size_in_kb: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub enable_sampling: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub enable_systrace: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub enable_argument_filter: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub included_categories: Option<Vec<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub excluded_categories: Option<Vec<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub synthetic_delays: Option<Vec<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub memory_dump_config: Option<serde_json::Value>,
}
impl TraceConfig {
pub fn new() -> Self {
Self::default()
}
#[must_use]
pub fn included_categories(mut self, categories: Vec<String>) -> Self {
self.included_categories = Some(categories);
self
}
#[must_use]
pub fn include_category(mut self, category: impl Into<String>) -> Self {
let categories = self.included_categories.get_or_insert_with(Vec::new);
categories.push(category.into());
self
}
#[must_use]
pub fn excluded_categories(mut self, categories: Vec<String>) -> Self {
self.excluded_categories = Some(categories);
self
}
#[must_use]
pub fn record_mode(mut self, mode: impl Into<String>) -> Self {
self.record_mode = Some(mode.into());
self
}
}
#[derive(Debug, Clone, Serialize, Default)]
pub struct EndParams {}
#[derive(Debug, Clone, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct EndResult {
pub stream: Option<String>,
pub stream_compression: Option<StreamCompression>,
}
#[derive(Debug, Clone, Serialize, Default)]
pub struct GetCategoriesParams {}
#[derive(Debug, Clone, Deserialize)]
pub struct GetCategoriesResult {
pub categories: Vec<String>,
}
#[derive(Debug, Clone, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct RecordClockSyncMarkerParams {
pub sync_id: String,
}
#[derive(Debug, Clone, Serialize, Default)]
#[serde(rename_all = "camelCase")]
pub struct RequestMemoryDumpParams {
#[serde(skip_serializing_if = "Option::is_none")]
pub deterministic: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub level_of_detail: Option<String>,
}
#[derive(Debug, Clone, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct RequestMemoryDumpResult {
pub dump_guid: String,
pub success: bool,
}
#[derive(Debug, Clone, Deserialize)]
pub struct DataCollectedEvent {
pub value: Vec<serde_json::Value>,
}
#[derive(Debug, Clone, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct TracingCompleteEvent {
pub stream: Option<String>,
pub stream_compression: Option<StreamCompression>,
pub stream_format: Option<StreamFormat>,
}
#[derive(Debug, Clone, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct BufferUsageEvent {
pub percent_full: Option<f64>,
pub event_count: Option<f64>,
pub value: Option<f64>,
}