This commit is contained in:
Simon
2025-08-16 18:46:10 +00:00
parent 2248d11d3e
commit 49ca76ab48
3 changed files with 85 additions and 23 deletions

View File

@@ -60,21 +60,33 @@ impl VideoEmbed {
#[derive(serde::Serialize, Debug, Clone)]
pub struct VideoItem {
pub duration: u32, // 110,
#[serde(skip_serializing_if = "Option::is_none")]
pub views: Option<u32>, // 14622653,
#[serde(skip_serializing_if = "Option::is_none")]
pub rating: Option<f32>, // 0.0,
pub id: String, // "c85017ca87477168d648727753c4ded8a35f173e22ef93743e707b296becb299",
pub title: String, // "20 Minutes of Adorable Kittens BEST Compilation",
pub url: String, // "https://www.youtube.com/watch?v=y0sF5xhGreA",
pub channel: String, // "youtube",
pub thumb: String, // "https://i.ytimg.com/vi/y0sF5xhGreA/hqdefault.jpg",
#[serde(skip_serializing_if = "Option::is_none")]
pub uploader: Option<String>, // "The Pet Collective",
#[serde(skip_serializing_if = "Option::is_none")]
pub uploaderUrl: Option<String>, // "https://www.youtube.com/@petcollective",
#[serde(skip_serializing_if = "Option::is_none")]
pub verified: Option<bool>, // false,
#[serde(skip_serializing_if = "Option::is_none")]
pub tags: Option<Vec<String>>, // [],
#[serde(skip_serializing_if = "Option::is_none")]
pub uploadedAt: Option<u64>, // 1741142954
#[serde(skip_serializing_if = "Option::is_none")]
pub formats: Option<Vec<VideoFormat>>, // Additional HTTP headers if needed
#[serde(skip_serializing_if = "Option::is_none")]
pub embed: Option<VideoEmbed>, // Optional embed information
pub preview: Option<String>
#[serde(skip_serializing_if = "Option::is_none")]
pub preview: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub aspectRation: Option<f32>
}
#[allow(dead_code)]
impl VideoItem {
@@ -102,7 +114,8 @@ impl VideoItem {
uploadedAt: None,
formats: None, // Placeholder for formats
embed: None, // Placeholder for embed information
preview: None
preview: None,
aspectRation: None
}
}
pub fn tags(mut self, tags: Vec<String>) -> Self {
@@ -152,6 +165,11 @@ impl VideoItem {
self.preview = Some(preview);
self
}
pub fn aspect_ratio(mut self, aspect_ratio: f32) -> Self {
self.aspectRation = Some(aspect_ratio);
self
}
}
#[derive(serde::Serialize, Debug, Clone)]
@@ -159,27 +177,49 @@ pub struct VideoFormat {
url: String,
quality: String,
format: String,
#[serde(skip_serializing_if = "Option::is_none")]
format_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
format_note: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
filesize: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
asr: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
fps: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
width: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
height: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
tbr: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
language: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
language_preference: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
ext: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
vcodec: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
acodec: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
dynamic_range: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
abr: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
vbr: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
container: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
protocol: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
audio_ext: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
video_ext: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
resolution: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
http_headers: Option<HashMap<String, String>>,
}