From 17094d121b17c78a47e4d2451429fbd5af7de388 Mon Sep 17 00:00:00 2001 From: ThetaDev Date: Sun, 4 Sep 2022 00:04:37 +0200 Subject: [PATCH] fix: response models --- src/client/player.rs | 20 ++++++++++---------- src/client/response/mod.rs | 1 + src/client/response/player.rs | 2 ++ src/client/response/playlist.rs | 1 + src/client/response/video.rs | 9 +++------ 5 files changed, 17 insertions(+), 16 deletions(-) diff --git a/src/client/player.rs b/src/client/player.rs index 6267a2f..bdb5e3a 100644 --- a/src/client/player.rs +++ b/src/client/player.rs @@ -530,9 +530,9 @@ mod tests { } /// Assert equality within 10% margin - fn assert_approx(left: u32, right: u32) { + fn assert_approx(left: f64, right: f64) { if left != right { - let f = left as f64 / right as f64; + let f = left / right; assert!( 0.9 < f && f < 1.1, "{} not within 10% margin of {}", @@ -593,7 +593,7 @@ mod tests { .unwrap(); // Bitrates may change between requests - assert_approx(video.bitrate, 1507068); + assert_approx(video.bitrate as f64, 1507068.0); assert_eq!(video.average_bitrate, 1345149); assert_eq!(video.size, 43553412); assert_eq!(video.width, 1280); @@ -605,7 +605,7 @@ mod tests { assert_eq!(video.format, VideoFormat::Webm); assert_eq!(video.codec, VideoCodec::Vp9); - assert_approx(audio.bitrate, 130685); + assert_approx(audio.bitrate as f64, 130685.0); assert_eq!(audio.average_bitrate, 129496); assert_eq!(audio.size, 4193863); assert_eq!(audio.mime, "audio/mp4; codecs=\"mp4a.40.2\""); @@ -623,9 +623,9 @@ mod tests { .find(|s| s.itag == 251) .unwrap(); - assert_approx(video.bitrate, 1340829); - assert_eq!(video.average_bitrate, 1233444); - assert_eq!(video.size, 39936630); + assert_approx(video.bitrate as f64, 1340829.0); + assert_approx(video.average_bitrate as f64, 1233444.0); + assert_approx(video.size as f64, 39936630.0); assert_eq!(video.width, 1280); assert_eq!(video.height, 720); assert_eq!(video.fps, 30); @@ -636,9 +636,9 @@ mod tests { assert_eq!(video.codec, VideoCodec::Av01); assert_eq!(video.throttled, false); - assert_approx(audio.bitrate, 142718); - assert_eq!(audio.average_bitrate, 130708); - assert_eq!(audio.size, 4232344); + assert_approx(audio.bitrate as f64, 142718.0); + assert_approx(audio.average_bitrate as f64, 130708.0); + assert_approx(audio.size as f64, 4232344.0); assert_eq!(audio.mime, "audio/webm; codecs=\"opus\""); assert_eq!(audio.format, AudioFormat::Webm); assert_eq!(audio.codec, AudioCodec::Opus); diff --git a/src/client/response/mod.rs b/src/client/response/mod.rs index 96d9e4e..f96ed91 100644 --- a/src/client/response/mod.rs +++ b/src/client/response/mod.rs @@ -155,6 +155,7 @@ pub enum TimeOverlayStyle { #[serde(rename_all = "camelCase")] pub struct MusicItem { pub thumbnail: MusicThumbnailRenderer, + #[serde(default)] #[serde_as(deserialize_as = "DefaultOnError")] pub playlist_item_data: Option, #[serde_as(as = "VecSkipError<_>")] diff --git a/src/client/response/player.rs b/src/client/response/player.rs index 8f6d938..36b20f6 100644 --- a/src/client/response/player.rs +++ b/src/client/response/player.rs @@ -81,6 +81,7 @@ pub struct Format { #[serde_as(as = "JsonString")] pub content_length: u64, + #[serde(default)] #[serde_as(deserialize_as = "DefaultOnError")] pub quality: Option, pub fps: Option, @@ -89,6 +90,7 @@ pub struct Format { pub color_info: Option, // Audio only + #[serde(default)] #[serde_as(deserialize_as = "DefaultOnError")] pub audio_quality: Option, #[serde_as(as = "Option")] diff --git a/src/client/response/playlist.rs b/src/client/response/playlist.rs index 223304d..be39903 100644 --- a/src/client/response/playlist.rs +++ b/src/client/response/playlist.rs @@ -90,6 +90,7 @@ pub struct HeaderRenderer { pub playlist_id: String, #[serde_as(as = "crate::serializer::text::Text")] pub title: String, + #[serde(default)] #[serde_as(as = "DefaultOnError>")] pub description_text: Option, /// `"495", " videos"` diff --git a/src/client/response/video.rs b/src/client/response/video.rs index b142558..47d624c 100644 --- a/src/client/response/video.rs +++ b/src/client/response/video.rs @@ -77,6 +77,7 @@ pub enum VideoResultsItem { owner: VideoOwner, #[serde_as(as = "crate::serializer::text::Text")] description: String, + #[serde(default)] #[serde_as(deserialize_as = "DefaultOnError")] metadata_row_container: Option, }, @@ -337,16 +338,12 @@ pub struct Comment { #[derive(Clone, Debug, Deserialize)] #[serde(rename_all = "camelCase")] pub struct CommentRenderer { - /* - #[serde_as(as = "crate::serializer::text::Text")] - pub author_text: String, - pub author_thumbnail: Thumbnails, - pub author_endpoint: AuthorEndpoint, - */ // There may be comments with missing authors (possibly deleted users?) + #[serde(default)] #[serde_as(as = "DefaultOnError>")] pub author_text: Option, pub author_thumbnail: Thumbnails, + #[serde(default)] #[serde_as(as = "DefaultOnError")] pub author_endpoint: Option,