Skip to main content

bloop_sdk/
event.rs

1use serde::Serialize;
2
3/// User-facing error event to capture.
4#[derive(Debug, Clone, Serialize, Default)]
5pub struct Event {
6    pub error_type: String,
7    pub message: String,
8    #[serde(skip_serializing_if = "Option::is_none")]
9    pub source: Option<String>,
10    #[serde(skip_serializing_if = "Option::is_none")]
11    pub route_or_procedure: Option<String>,
12    #[serde(skip_serializing_if = "Option::is_none")]
13    pub screen: Option<String>,
14    #[serde(skip_serializing_if = "Option::is_none")]
15    pub stack: Option<String>,
16    #[serde(skip_serializing_if = "Option::is_none")]
17    pub http_status: Option<u16>,
18    #[serde(skip_serializing_if = "Option::is_none")]
19    pub request_id: Option<String>,
20    #[serde(skip_serializing_if = "Option::is_none")]
21    pub user_id_hash: Option<String>,
22    #[serde(skip_serializing_if = "Option::is_none")]
23    pub metadata: Option<serde_json::Value>,
24}
25
26/// Internal ingest event with timestamp + environment fields.
27#[derive(Debug, Serialize)]
28pub(crate) struct IngestEvent {
29    pub timestamp: i64,
30    pub source: String,
31    pub environment: String,
32    pub release: String,
33    pub error_type: String,
34    pub message: String,
35    #[serde(skip_serializing_if = "Option::is_none")]
36    pub route_or_procedure: Option<String>,
37    #[serde(skip_serializing_if = "Option::is_none")]
38    pub screen: Option<String>,
39    #[serde(skip_serializing_if = "Option::is_none")]
40    pub stack: Option<String>,
41    #[serde(skip_serializing_if = "Option::is_none")]
42    pub http_status: Option<u16>,
43    #[serde(skip_serializing_if = "Option::is_none")]
44    pub request_id: Option<String>,
45    #[serde(skip_serializing_if = "Option::is_none")]
46    pub user_id_hash: Option<String>,
47    #[serde(skip_serializing_if = "Option::is_none")]
48    pub metadata: Option<serde_json::Value>,
49}