tauri_plugin_posthog/
models.rs1use chrono::{DateTime, Utc};
2use serde::{Deserialize, Serialize};
3use std::collections::HashMap;
4
5#[derive(Debug, Clone, Serialize, Deserialize)]
6#[serde(rename_all = "camelCase")]
7pub struct CaptureRequest {
8 pub event: String,
9 #[serde(skip_serializing_if = "Option::is_none")]
10 pub properties: Option<HashMap<String, serde_json::Value>>,
11 #[serde(skip_serializing_if = "Option::is_none")]
12 pub distinct_id: Option<String>,
13 #[serde(skip_serializing_if = "Option::is_none")]
14 pub groups: Option<HashMap<String, String>>,
15 #[serde(skip_serializing_if = "Option::is_none")]
16 pub timestamp: Option<DateTime<Utc>>,
17 #[serde(default)]
18 pub anonymous: bool,
19}
20
21#[derive(Debug, Clone, Serialize, Deserialize)]
22#[serde(rename_all = "camelCase")]
23pub struct IdentifyRequest {
24 pub distinct_id: String,
25 #[serde(skip_serializing_if = "Option::is_none")]
26 pub properties: Option<HashMap<String, serde_json::Value>>,
27}
28
29#[derive(Debug, Clone, Serialize, Deserialize)]
30#[serde(rename_all = "camelCase")]
31pub struct AliasRequest {
32 pub distinct_id: String,
33 pub alias: String,
34}
35
36#[derive(Debug, Clone, Serialize, Deserialize)]
37#[serde(rename_all = "camelCase")]
38pub struct PostHogConfig {
39 pub api_key: String,
40 #[serde(default = "default_api_endpoint")]
41 pub api_endpoint: String,
42 #[serde(default = "default_request_timeout")]
43 pub request_timeout_seconds: u64,
44}
45
46impl Default for PostHogConfig {
47 fn default() -> Self {
48 Self {
49 api_key: String::new(),
50 api_endpoint: default_api_endpoint(),
51 request_timeout_seconds: default_request_timeout(),
52 }
53 }
54}
55
56#[derive(Debug, Clone, Serialize, Deserialize)]
57#[serde(rename_all = "camelCase")]
58pub struct BatchCaptureRequest {
59 pub events: Vec<CaptureRequest>,
60}
61
62pub fn default_api_endpoint() -> String {
63 "https://us.i.posthog.com/i/v0/e/".to_string()
64}
65
66fn default_request_timeout() -> u64 {
67 30
68}