use serde::{Deserialize, Serialize}; pub const CHUNK_SIZE: u64 = 16 * 1024 * 1024; #[derive(Debug, Deserialize)] pub struct CreateUploadRequest { pub name: String, pub size: u64, pub last_modified: i64, } #[derive(Debug, Deserialize, Serialize)] pub struct CreateUploadResponse { pub upload_id: String, pub chunk_size: u64, pub total_chunks: u64, pub completed_chunks: Vec, } #[derive(Debug, Deserialize, Serialize)] pub struct UploadProgressResponse { pub upload_id: String, pub name: String, pub size: u64, pub chunk_size: u64, pub total_chunks: u64, pub completed_chunks: Vec, } #[derive(Debug, Deserialize, Serialize)] pub struct CompleteUploadResponse { pub upload_id: String, pub name: String, pub file_path: String, } #[derive(Clone, Debug, Deserialize, Serialize)] pub struct UploadMeta { pub id: String, pub original_name: String, pub safe_name: String, pub size: u64, pub last_modified: i64, pub chunk_size: u64, pub total_chunks: u64, pub created_at: String, } impl UploadMeta { #[must_use] pub fn create_response(&self) -> CreateUploadResponse { CreateUploadResponse { upload_id: self.id.clone(), chunk_size: self.chunk_size, total_chunks: self.total_chunks, completed_chunks: Vec::new(), } } #[must_use] pub fn progress_response(&self, completed_chunks: Vec) -> UploadProgressResponse { UploadProgressResponse { upload_id: self.id.clone(), name: self.original_name.clone(), size: self.size, chunk_size: self.chunk_size, total_chunks: self.total_chunks, completed_chunks, } } #[must_use] pub fn complete_response(&self, file_path: String) -> CompleteUploadResponse { CompleteUploadResponse { upload_id: self.id.clone(), name: self.safe_name.clone(), file_path, } } }