pub struct CrashPanic {
pub build_info: BuildInfo,
pub callstack: String,
pub message: Option<String>,
pub file_line: Option<String>,
}
pub struct Identify {
pub build_info: re_build_info::BuildInfo,
pub rust_version: Option<String>,
pub llvm_version: Option<String>,
pub python_version: Option<String>,
pub opt_in_metadata: HashMap<String, Property>,
}
pub struct ViewerStarted {
pub url: Option<String>,
pub app_env: &'static str,
}
pub struct OpenRecording {
pub url: Option<String>,
pub app_env: &'static str,
pub store_info: Option<StoreInfo>,
pub data_source: Option<&'static str>,
}
pub struct StoreInfo {
pub application_id: Id,
pub recording_id: Id,
pub store_source: String,
pub rust_version: Option<String>,
pub llvm_version: Option<String>,
pub python_version: Option<String>,
pub is_official_example: bool,
pub app_id_starts_with_rerun_example: bool,
}
#[derive(Clone)]
pub enum Id {
Official(String),
Hashed(Property),
}
pub struct ServeWasm;
impl Event for ServeWasm {
const NAME: &'static str = "serve_wasm";
}
impl Properties for ServeWasm {
}
use std::collections::HashMap;
use re_build_info::BuildInfo;
use crate::{AnalyticsEvent, Event, EventKind, Properties, Property};
impl From<Id> for Property {
fn from(val: Id) -> Self {
match val {
Id::Official(id) => Property::String(id),
Id::Hashed(id) => id,
}
}
}
impl Event for Identify {
const NAME: &'static str = "$identify";
const KIND: EventKind = EventKind::Update;
}
impl Properties for Identify {
fn serialize(self, event: &mut AnalyticsEvent) {
let Self {
build_info,
rust_version,
llvm_version,
python_version,
opt_in_metadata,
} = self;
build_info.serialize(event);
event.insert_opt("rust_version", rust_version);
event.insert_opt("llvm_version", llvm_version);
event.insert_opt("python_version", python_version);
for (name, value) in opt_in_metadata {
event.insert(name, value);
}
}
}
impl Event for ViewerStarted {
const NAME: &'static str = "viewer_started";
}
impl Properties for ViewerStarted {
fn serialize(self, event: &mut AnalyticsEvent) {
let Self { url, app_env } = self;
event.insert("app_env", app_env);
event.insert_opt("url", url);
}
}
impl Event for OpenRecording {
const NAME: &'static str = "open_recording";
}
impl Properties for OpenRecording {
fn serialize(self, event: &mut AnalyticsEvent) {
let Self {
url,
app_env,
store_info,
data_source,
} = self;
event.insert_opt("url", url);
event.insert("app_env", app_env);
if let Some(store_info) = store_info {
event.insert("application_id", store_info.application_id);
event.insert("recording_id", store_info.recording_id);
event.insert("store_source", store_info.store_source);
event.insert_opt("rust_version", store_info.rust_version);
event.insert_opt("llvm_version", store_info.llvm_version);
event.insert_opt("python_version", store_info.python_version);
event.insert("is_official_example", store_info.is_official_example);
event.insert(
"app_id_starts_with_rerun_example",
store_info.app_id_starts_with_rerun_example,
);
}
if let Some(data_source) = data_source {
event.insert("data_source", data_source);
}
}
}
impl Event for CrashPanic {
const NAME: &'static str = "crash-panic";
}
impl Properties for CrashPanic {
fn serialize(self, event: &mut AnalyticsEvent) {
let Self {
build_info,
callstack,
message,
file_line,
} = self;
build_info.serialize(event);
event.insert("callstack", callstack);
event.insert_opt("message", message);
event.insert_opt("file_line", file_line);
}
}
pub struct CrashSignal {
pub build_info: BuildInfo,
pub signal: String,
pub callstack: String,
}
impl Event for CrashSignal {
const NAME: &'static str = "crash-signal";
}
impl Properties for CrashSignal {
fn serialize(self, event: &mut AnalyticsEvent) {
let Self {
build_info,
signal,
callstack,
} = self;
build_info.serialize(event);
event.insert("signal", signal.clone());
event.insert("callstack", callstack.clone());
}
}