saorsa_webrtc/
lib.rs

1//! Saorsa WebRTC - WebRTC implementation over ant-quic transport
2//!
3//! This library provides a WebRTC implementation that uses ant-quic as the underlying
4//! transport layer instead of traditional ICE/STUN/TURN. It features:
5//!
6//! - **Native QUIC Transport**: Uses ant-quic for reliable, encrypted connections
7//! - **DHT-based Signaling**: Distributed signaling without centralized servers
8//! - **Post-Quantum Cryptography**: Built-in PQC support via ant-quic
9//! - **NAT Traversal**: Automatic hole punching and relay fallback
10//! - **High Performance**: Low-latency media streaming with QoS
11//!
12//! # Examples
13//!
14//! ```rust,no_run
15//! use saorsa_webrtc::{WebRtcService, MediaConstraints, SignalingHandler, AntQuicTransport, TransportConfig};
16//! use std::sync::Arc;
17//!
18//! # async fn example() -> anyhow::Result<()> {
19//! // Create signaling transport
20//! let transport = Arc::new(AntQuicTransport::new(TransportConfig::default()));
21//! let signaling = Arc::new(SignalingHandler::new(transport));
22//!
23//! // Create WebRTC service
24//! let service = WebRtcService::<saorsa_webrtc::PeerIdentityString, AntQuicTransport>::new(
25//!     signaling,
26//!     Default::default()
27//! ).await?;
28//!
29//! // Start the service
30//! service.start().await?;
31//!
32//! // Initiate a video call
33//! let call_id = service.initiate_call(
34//!     saorsa_webrtc::PeerIdentityString::new("eve-frank-grace-henry"),
35//!     MediaConstraints::video_call()
36//! ).await?;
37//! # Ok(())
38//! # }
39//! ```
40
41#![deny(missing_docs)]
42#![deny(unsafe_code)]
43#![warn(clippy::all)]
44// Allow pedantic warnings for stub implementations
45#![allow(clippy::pedantic)]
46#![allow(clippy::nursery)]
47#![allow(clippy::unused_async)]
48#![allow(clippy::module_name_repetitions)]
49#![allow(clippy::derivable_impls)]
50
51/// Core WebRTC types and data structures
52pub mod types;
53
54/// WebRTC service and configuration
55pub mod service;
56
57/// Media stream management
58pub mod media;
59
60/// Call management and state
61pub mod call;
62
63/// Signaling protocol and handlers
64pub mod signaling;
65
66/// ant-quic transport integration
67pub mod transport;
68
69/// QUIC media stream management with QoS
70pub mod quic_streams;
71
72/// Bridge between WebRTC and QUIC
73pub mod quic_bridge;
74
75/// Peer identity abstraction
76pub mod identity;
77
78// Re-export main types at crate root
79pub use call::{CallManager, CallManagerConfig};
80pub use identity::{PeerIdentity, PeerIdentityString};
81pub use media::{
82    AudioDevice, AudioTrack, MediaEvent, MediaStream, MediaStreamManager, VideoDevice, VideoTrack,
83};
84pub use quic_bridge::{RtpPacket, StreamConfig, StreamType, WebRtcQuicBridge};
85pub use service::{WebRtcConfig, WebRtcEvent, WebRtcService, WebRtcServiceBuilder};
86pub use signaling::{
87    SignalingHandler, SignalingMessage as SignalingMessageType, SignalingTransport,
88};
89pub use transport::{AntQuicTransport, TransportConfig};
90pub use types::*;
91
92/// Prelude module for convenient imports
93pub mod prelude {
94    pub use crate::call::{CallManager, CallManagerConfig};
95    pub use crate::identity::{PeerIdentity, PeerIdentityString};
96    pub use crate::media::{MediaEvent, MediaStreamManager};
97    pub use crate::service::{WebRtcConfig, WebRtcEvent, WebRtcService, WebRtcServiceBuilder};
98    pub use crate::signaling::{SignalingHandler, SignalingTransport};
99    pub use crate::transport::{AntQuicTransport, TransportConfig};
100    pub use crate::types::{
101        CallEvent, CallId, CallState, MediaConstraints, MediaType, NativeQuicConfiguration,
102    };
103}