1use serde::{Deserialize, Serialize};
4use std::collections::HashMap;
5
6#[derive(Debug, Clone, Serialize, Deserialize)]
8pub struct TelemetryData {
9    pub metric: String,
11    pub value: f64,
13    #[serde(default, skip_serializing_if = "HashMap::is_empty")]
15    pub tags: HashMap<String, String>,
16    pub timestamp: Option<i64>,
18}
19
20#[derive(Debug, Default, Serialize, Deserialize)]
22pub struct TelemetryBatch {
23    pub points: Vec<TelemetryData>,
25}
26
27#[derive(Debug, Clone, Serialize, Deserialize)]
29pub struct ClientConfig {
30    pub base_url: String,
32    pub api_key: Option<String>,
34    #[serde(default = "default_timeout")]
36    pub timeout_secs: u64,
37    #[serde(default = "default_true")]
39    pub enable_telemetry: bool,
40}
41
42fn default_timeout() -> u64 {
43    30
44}
45
46fn default_true() -> bool {
47    true
48}
49
50impl Default for ClientConfig {
51    fn default() -> Self {
52        Self {
53            base_url: "http://localhost:8080".to_string(),
54            api_key: None,
55            timeout_secs: default_timeout(),
56            enable_telemetry: true,
57        }
58    }
59}