tauri_plugin_posthog/
models.rs

1use 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_host")]
41    pub api_host: String,
42    #[serde(skip_serializing_if = "Option::is_none")]
43    pub options: Option<PostHogOptions>,
44}
45
46#[derive(Debug, Clone, Serialize, Deserialize, Default, PartialEq)]
47#[serde(rename_all = "camelCase")]
48pub struct PostHogOptions {
49    #[serde(skip_serializing_if = "Option::is_none")]
50    pub disable_cookie: Option<bool>,
51    #[serde(skip_serializing_if = "Option::is_none")]
52    pub disable_session_recording: Option<bool>,
53    #[serde(skip_serializing_if = "Option::is_none")]
54    pub capture_pageview: Option<bool>,
55    #[serde(skip_serializing_if = "Option::is_none")]
56    pub capture_pageleave: Option<bool>,
57    #[serde(skip_serializing_if = "Option::is_none")]
58    pub debug: Option<bool>,
59    #[serde(skip_serializing_if = "Option::is_none")]
60    pub persistence: Option<String>,
61    #[serde(skip_serializing_if = "Option::is_none")]
62    pub person_profiles: Option<String>,
63}
64
65impl Default for PostHogConfig {
66    fn default() -> Self {
67        Self {
68            api_key: String::new(),
69            api_host: default_api_host(),
70            options: None,
71        }
72    }
73}
74
75pub fn default_api_host() -> String {
76    "https://us.i.posthog.com".to_string()
77}