telemetry_kit/lib.rs
1//! # telemetry-kit
2//!
3//! Privacy-first, batteries-included telemetry for Rust applications.
4//!
5//! ## Quick Start
6//!
7//! ```rust,no_run
8//! use telemetry_kit::prelude::*;
9//!
10//! #[tokio::main]
11//! async fn main() -> telemetry_kit::Result<()> {
12//! // Initialize telemetry with sensible defaults
13//! let telemetry = TelemetryKit::builder()
14//! .service_name("my-app")?
15//! .service_version(env!("CARGO_PKG_VERSION"))
16//! .build()?;
17//!
18//! // Track events
19//! telemetry.track_command("build", |event| {
20//! event
21//! .flag("--release")
22//! .duration_ms(1234)
23//! .success(true)
24//! }).await?;
25//!
26//! Ok(())
27//! }
28//! ```
29//!
30//! ## Features
31//!
32//! - **Zero-config**: Sensible defaults, minimal boilerplate
33//! - **Privacy-first**: Built-in anonymization and GDPR compliance
34//! - **CLI-optimized**: Perfect for command-line applications
35//! - **Self-hostable**: Simple collection server included
36//!
37//! ## Sync Protocol
38//!
39//! The SDK automatically syncs events to telemetry-kit.dev using HMAC-SHA256
40//! authentication. Events are buffered locally in SQLite and synced in batches.
41
42#![warn(missing_docs)]
43#![warn(rustdoc::missing_crate_level_docs)]
44
45pub mod error;
46pub mod event;
47pub mod storage;
48pub mod user;
49
50#[cfg(feature = "sync")]
51pub mod sync;
52
53#[cfg(feature = "sync")]
54pub mod auto_sync;
55
56#[cfg(feature = "privacy")]
57pub mod privacy;
58
59#[cfg(feature = "napi-bindings")]
60pub mod bindings;
61
62mod builder;
63mod telemetry;
64
65pub use builder::TelemetryBuilder;
66pub use error::{Result, TelemetryError};
67pub use telemetry::TelemetryKit;
68
69// Re-export procedural macros
70#[cfg(feature = "macros")]
71pub use telemetry_kit_macros::instrument;
72
73/// Prelude module for convenient imports
74///
75/// ```rust
76/// use telemetry_kit::prelude::*;
77/// ```
78pub mod prelude {
79 pub use crate::builder::TelemetryBuilder;
80 pub use crate::error::{Result, TelemetryError};
81 pub use crate::event::*;
82 pub use crate::telemetry::TelemetryKit;
83
84 #[cfg(feature = "macros")]
85 pub use crate::instrument;
86}
87
88#[cfg(test)]
89mod tests {
90 use super::*;
91
92 #[test]
93 fn test_basic_initialization() {
94 let builder = TelemetryKit::builder();
95 assert!(builder.service_name("test").is_ok());
96 }
97}