use serde::{ Deserialize, Serialize };
use std::collections::HashMap;
#[ derive( Debug, Clone, PartialEq, Eq, Serialize, Deserialize ) ]
pub enum StreamDirection
{
Outbound,
Inbound,
Bidirectional,
}
#[ derive( Debug, Clone, PartialEq, Eq, Serialize, Deserialize ) ]
pub enum StreamControl
{
Start,
Pause,
Resume,
Stop,
Reset,
}
#[ derive( Debug, Clone, Serialize, Deserialize, PartialEq ) ]
pub enum WebSocketStreamMessage
{
Control {
command : StreamControl,
metadata : Option< HashMap< String, String > >
},
Data {
content : String,
message_type : String,
correlation_id : Option< String >
},
Heartbeat {
timestamp : u64
},
Error {
error_code : u32,
message : String,
details : Option< HashMap< String, String > >
},
Auth {
token : String,
scope : Option< Vec< String > >
},
}
#[ derive( Debug, Clone, PartialEq, Eq, Serialize, Deserialize ) ]
pub enum StreamSessionState
{
Initializing,
Active,
Paused,
Reconnecting,
Terminated,
Error,
}
#[ derive( Debug, Clone, Serialize, Deserialize, PartialEq ) ]
pub struct SessionMetrics
{
pub messages_sent : u64,
pub messages_received : u64,
pub bytes_sent : u64,
pub bytes_received : u64,
pub uptime_seconds : u64,
pub reconnection_count : u32,
pub last_activity : Option< u64 >,
pub error_count : u32,
}
impl Default for SessionMetrics
{
fn default() -> Self
{
Self {
messages_sent : 0,
messages_received : 0,
bytes_sent : 0,
bytes_received : 0,
uptime_seconds : 0,
reconnection_count : 0,
last_activity : None,
error_count : 0,
}
}
}
#[ derive( Debug, Clone, Serialize, Deserialize, PartialEq ) ]
pub struct EnhancedStreamingMetrics
{
pub basic_metrics : crate::models::websocket_streaming::WebSocketMetrics,
pub streaming_metrics : crate::models::websocket_streaming_optimized::StreamingMetrics,
pub pool_stats : crate::models::websocket_streaming_optimized::ConnectionPoolStats,
pub performance_benchmarks : PerformanceBenchmarks,
}
#[ derive( Debug, Clone, Serialize, Deserialize, PartialEq ) ]
pub struct PerformanceBenchmarks
{
pub avg_connection_time_ms : f64,
pub avg_serialization_time_us : f64,
pub memory_optimization_ratio : f64,
pub cpu_optimization_ratio : f64,
pub performance_improvement_percent : f64,
}
impl Default for EnhancedStreamingMetrics
{
fn default() -> Self
{
use crate::models::websocket_streaming::WebSocketMetrics;
use crate::models::websocket_streaming_optimized::{ StreamingMetrics, ConnectionPoolStats };
Self {
basic_metrics : WebSocketMetrics::default(),
streaming_metrics : StreamingMetrics::default(),
pool_stats : ConnectionPoolStats {
total_connections : 0,
active_connections : 0,
idle_connections : 0,
connections_created : 0,
connections_reused : 0,
hit_ratio : 0.0,
avg_connection_age_seconds : 0.0,
},
performance_benchmarks : PerformanceBenchmarks::default(),
}
}
}
impl Default for PerformanceBenchmarks
{
fn default() -> Self
{
Self {
avg_connection_time_ms : 0.0,
avg_serialization_time_us : 0.0,
memory_optimization_ratio : 1.0,
cpu_optimization_ratio : 1.0,
performance_improvement_percent : 0.0,
}
}
}