1use chrono::{DateTime, Utc};
4use serde::{Deserialize, Serialize};
5use std::collections::HashMap;
6use std::time::Duration;
7
8#[derive(Debug, Clone, Serialize, Deserialize)]
9pub struct UserActivity {
10 pub id: String, pub user_id: u64,
15 pub activity_type: String,
17 pub timestamp: DateTime<Utc>,
19 pub metadata: HashMap<String, String>,
21}
22
23#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)]
24pub enum MediaPriority {
25 High = 3, Normal = 2, Low = 1, }
29
30impl Default for MediaPriority {
31 fn default() -> Self {
32 MediaPriority::Normal
33 }
34}
35
36#[derive(Debug, Clone, Serialize, Deserialize)]
37pub struct MediaStream {
38 pub id: String,
39 pub user_id: u64,
40 pub content_type: MediaType,
41 pub quality: QualityLevel,
42 pub chunk_size: usize,
43 pub created_at: DateTime<Utc>,
44 pub metadata: HashMap<String, String>,
45}
46
47#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)]
48pub enum MediaType {
49 Video,
50 Audio,
51 Mixed, }
53
54#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)]
55pub enum QualityLevel {
56 Low, Medium, High, UltraHigh, }
61
62#[derive(Debug, Clone, Serialize, Deserialize, Eq, PartialEq)]
63pub struct MediaChunk {
64 pub stream_id: String,
65 pub sequence_number: u64,
66 pub data: Vec<u8>,
67 pub chunk_type: ChunkType,
68 pub priority: MediaPriority,
69 pub timestamp: Duration,
70 pub is_final: bool,
71 pub checksum: Option<String>,
72}
73
74#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)]
75pub enum ChunkType {
76 VideoIFrame, VideoPFrame, VideoBFrame, Audio, Metadata, Thumbnail, }
83
84impl ChunkType {
85 pub fn default_priority(&self) -> MediaPriority {
86 match self {
87 ChunkType::VideoIFrame | ChunkType::Audio | ChunkType::Metadata => MediaPriority::High,
88 ChunkType::VideoPFrame => MediaPriority::Normal,
89 ChunkType::VideoBFrame | ChunkType::Thumbnail => MediaPriority::Low,
90 }
91 }
92}
93
94#[derive(Debug, Clone, Serialize, Deserialize)]
95pub struct StreamMetrics {
96 pub stream_id: String,
97 pub bytes_processed: u64,
98 pub chunks_processed: u64,
99 pub dropped_chunks: u64,
100 pub average_chunk_size: f64,
101 pub buffer_utilization: f64,
102 pub last_updated: DateTime<Utc>,
103}