phytrace_sdk/lib.rs
1//! # PhyTrace SDK for Rust
2//!
3//! The PhyTrace SDK provides a comprehensive toolkit for integrating autonomous systems
4//! with the PhyWare data platform. It enables robots, autonomous vehicles, and other
5//! autonomous systems to capture telemetry data, normalize it to the PhyTrace Unified
6//! Data Model (UDM), and stream it to PhyCloud endpoints in real-time.
7//!
8//! ## Features
9//!
10//! - **UDM Models**: Strongly-typed Rust structs for all 23 UDM domains
11//! - **Event Builder**: Fluent API for constructing UDM events
12//! - **Validation**: Schema and business rule validation at the source
13//! - **Provenance**: Cryptographic signing and chain-of-custody tracking
14//! - **Transport**: HTTP (default), with gRPC/MQTT/WebSocket stubs for future
15//! - **Reliability**: Edge buffering, retry with backoff, circuit breaker, batching
16//! - **Agent**: High-level orchestrator for production deployments
17//!
18//! ## Quick Start
19//!
20//! ```rust,no_run
21//! use phytrace_sdk::{
22//! UdmEvent, SourceType, EventType,
23//! models::domains::{LocationDomain, MotionDomain},
24//! };
25//!
26//! fn main() -> Result<(), Box<dyn std::error::Error>> {
27//! // Build a UDM event using the fluent API
28//! let event = UdmEvent::new(SourceType::Amr)
29//! .with_event_type(EventType::TelemetryPeriodic)
30//! .with_location(LocationDomain {
31//! latitude: Some(41.8781),
32//! longitude: Some(-87.6298),
33//! heading_deg: Some(45.0),
34//! ..Default::default()
35//! })
36//! .with_motion(MotionDomain {
37//! speed_mps: Some(1.2),
38//! ..Default::default()
39//! });
40//!
41//! println!("Event ID: {}", event.event_id);
42//! Ok(())
43//! }
44//! ```
45//!
46//! ## Feature Flags
47//!
48//! - `http` (default): Enables HTTP transport via `reqwest`
49//! - `grpc`: Enables gRPC transport (future)
50//! - `mqtt`: Enables MQTT transport (future)
51//! - `websocket`: Enables WebSocket transport (future)
52//!
53//! ## Architecture
54//!
55//! ```text
56//! ┌─────────────────────────────────────────────────────────────────┐
57//! │ PhyTrace SDK (Rust) │
58//! │ │
59//! │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
60//! │ │ Models │ │ Core │ │ Transport │ │
61//! │ │ (UDM) │→ │ (Builder, │→ │ (HTTP, │ │
62//! │ │ │ │ Validate) │ │ Mock) │ │
63//! │ └─────────────┘ └─────────────┘ └─────────────┘ │
64//! │ │ │ │ │
65//! │ └────────────────┼────────────────┘ │
66//! │ ↓ │
67//! │ ┌─────────────────────────────────────────────────────────┐ │
68//! │ │ Reliability │ │
69//! │ │ (Buffer, Retry, Circuit Breaker, Batch) │ │
70//! │ └─────────────────────────────────────────────────────────┘ │
71//! │ ↓ │
72//! │ ┌─────────────────────────────────────────────────────────┐ │
73//! │ │ PhyTraceAgent │ │
74//! │ │ (Orchestration, Config, Lifecycle) │ │
75//! │ └─────────────────────────────────────────────────────────┘ │
76//! └─────────────────────────────────────────────────────────────────┘
77//! ```
78
79#![warn(missing_docs)]
80#![warn(rustdoc::missing_crate_level_docs)]
81#![cfg_attr(docsrs, feature(doc_cfg))]
82
83// Public modules
84pub mod agent;
85pub mod core;
86pub mod emitters;
87pub mod error;
88pub mod models;
89pub mod reliability;
90pub mod transport;
91
92// Re-exports for convenience
93pub use agent::PhyTraceAgent;
94pub use core::builder::EventBuilder;
95pub use core::config::PhyTraceConfig;
96pub use core::provenance::ProvenanceSigner;
97pub use core::validation::{validate_event, ValidationLevel, Validator};
98pub use emitters::periodic::PeriodicEmitter;
99pub use error::{PhyTraceError, PhyTraceResult};
100pub use models::enums::{EventType, OperationalMode, OperationalState, SafetyState, SourceType};
101pub use models::event::{Provenance, UdmEvent};
102pub use reliability::batch::BatchProcessor;
103pub use reliability::buffer::FileBuffer;
104pub use reliability::retry::RetryHandler;
105#[cfg(feature = "http")]
106pub use transport::http::HttpTransport;
107pub use transport::mock::MockTransport;
108pub use transport::traits::{BatchResult, SendResult, Transport, TransportStats};
109
110/// SDK version string
111pub const SDK_VERSION: &str = env!("CARGO_PKG_VERSION");
112
113/// UDM schema version supported by this SDK
114pub const UDM_VERSION: &str = "0.0.3";