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_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}