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}