fix: response models

This commit is contained in:
ThetaDev 2022-09-04 00:04:37 +02:00
parent 9da166304a
commit 17094d121b
5 changed files with 17 additions and 16 deletions

View file

@ -530,9 +530,9 @@ mod tests {
} }
/// Assert equality within 10% margin /// Assert equality within 10% margin
fn assert_approx(left: u32, right: u32) { fn assert_approx(left: f64, right: f64) {
if left != right { if left != right {
let f = left as f64 / right as f64; let f = left / right;
assert!( assert!(
0.9 < f && f < 1.1, 0.9 < f && f < 1.1,
"{} not within 10% margin of {}", "{} not within 10% margin of {}",
@ -593,7 +593,7 @@ mod tests {
.unwrap(); .unwrap();
// Bitrates may change between requests // 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.average_bitrate, 1345149);
assert_eq!(video.size, 43553412); assert_eq!(video.size, 43553412);
assert_eq!(video.width, 1280); assert_eq!(video.width, 1280);
@ -605,7 +605,7 @@ mod tests {
assert_eq!(video.format, VideoFormat::Webm); assert_eq!(video.format, VideoFormat::Webm);
assert_eq!(video.codec, VideoCodec::Vp9); 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.average_bitrate, 129496);
assert_eq!(audio.size, 4193863); assert_eq!(audio.size, 4193863);
assert_eq!(audio.mime, "audio/mp4; codecs=\"mp4a.40.2\""); assert_eq!(audio.mime, "audio/mp4; codecs=\"mp4a.40.2\"");
@ -623,9 +623,9 @@ mod tests {
.find(|s| s.itag == 251) .find(|s| s.itag == 251)
.unwrap(); .unwrap();
assert_approx(video.bitrate, 1340829); assert_approx(video.bitrate as f64, 1340829.0);
assert_eq!(video.average_bitrate, 1233444); assert_approx(video.average_bitrate as f64, 1233444.0);
assert_eq!(video.size, 39936630); assert_approx(video.size as f64, 39936630.0);
assert_eq!(video.width, 1280); assert_eq!(video.width, 1280);
assert_eq!(video.height, 720); assert_eq!(video.height, 720);
assert_eq!(video.fps, 30); assert_eq!(video.fps, 30);
@ -636,9 +636,9 @@ mod tests {
assert_eq!(video.codec, VideoCodec::Av01); assert_eq!(video.codec, VideoCodec::Av01);
assert_eq!(video.throttled, false); assert_eq!(video.throttled, false);
assert_approx(audio.bitrate, 142718); assert_approx(audio.bitrate as f64, 142718.0);
assert_eq!(audio.average_bitrate, 130708); assert_approx(audio.average_bitrate as f64, 130708.0);
assert_eq!(audio.size, 4232344); assert_approx(audio.size as f64, 4232344.0);
assert_eq!(audio.mime, "audio/webm; codecs=\"opus\""); assert_eq!(audio.mime, "audio/webm; codecs=\"opus\"");
assert_eq!(audio.format, AudioFormat::Webm); assert_eq!(audio.format, AudioFormat::Webm);
assert_eq!(audio.codec, AudioCodec::Opus); assert_eq!(audio.codec, AudioCodec::Opus);

View file

@ -155,6 +155,7 @@ pub enum TimeOverlayStyle {
#[serde(rename_all = "camelCase")] #[serde(rename_all = "camelCase")]
pub struct MusicItem { pub struct MusicItem {
pub thumbnail: MusicThumbnailRenderer, pub thumbnail: MusicThumbnailRenderer,
#[serde(default)]
#[serde_as(deserialize_as = "DefaultOnError")] #[serde_as(deserialize_as = "DefaultOnError")]
pub playlist_item_data: Option<PlaylistItemData>, pub playlist_item_data: Option<PlaylistItemData>,
#[serde_as(as = "VecSkipError<_>")] #[serde_as(as = "VecSkipError<_>")]

View file

@ -81,6 +81,7 @@ pub struct Format {
#[serde_as(as = "JsonString")] #[serde_as(as = "JsonString")]
pub content_length: u64, pub content_length: u64,
#[serde(default)]
#[serde_as(deserialize_as = "DefaultOnError")] #[serde_as(deserialize_as = "DefaultOnError")]
pub quality: Option<Quality>, pub quality: Option<Quality>,
pub fps: Option<u8>, pub fps: Option<u8>,
@ -89,6 +90,7 @@ pub struct Format {
pub color_info: Option<ColorInfo>, pub color_info: Option<ColorInfo>,
// Audio only // Audio only
#[serde(default)]
#[serde_as(deserialize_as = "DefaultOnError")] #[serde_as(deserialize_as = "DefaultOnError")]
pub audio_quality: Option<AudioQuality>, pub audio_quality: Option<AudioQuality>,
#[serde_as(as = "Option<JsonString>")] #[serde_as(as = "Option<JsonString>")]

View file

@ -90,6 +90,7 @@ pub struct HeaderRenderer {
pub playlist_id: String, pub playlist_id: String,
#[serde_as(as = "crate::serializer::text::Text")] #[serde_as(as = "crate::serializer::text::Text")]
pub title: String, pub title: String,
#[serde(default)]
#[serde_as(as = "DefaultOnError<Option<crate::serializer::text::Text>>")] #[serde_as(as = "DefaultOnError<Option<crate::serializer::text::Text>>")]
pub description_text: Option<String>, pub description_text: Option<String>,
/// `"495", " videos"` /// `"495", " videos"`

View file

@ -77,6 +77,7 @@ pub enum VideoResultsItem {
owner: VideoOwner, owner: VideoOwner,
#[serde_as(as = "crate::serializer::text::Text")] #[serde_as(as = "crate::serializer::text::Text")]
description: String, description: String,
#[serde(default)]
#[serde_as(deserialize_as = "DefaultOnError")] #[serde_as(deserialize_as = "DefaultOnError")]
metadata_row_container: Option<MetadataRowContainer>, metadata_row_container: Option<MetadataRowContainer>,
}, },
@ -337,16 +338,12 @@ pub struct Comment {
#[derive(Clone, Debug, Deserialize)] #[derive(Clone, Debug, Deserialize)]
#[serde(rename_all = "camelCase")] #[serde(rename_all = "camelCase")]
pub struct CommentRenderer { 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?) // There may be comments with missing authors (possibly deleted users?)
#[serde(default)]
#[serde_as(as = "DefaultOnError<Option<crate::serializer::text::Text>>")] #[serde_as(as = "DefaultOnError<Option<crate::serializer::text::Text>>")]
pub author_text: Option<String>, pub author_text: Option<String>,
pub author_thumbnail: Thumbnails, pub author_thumbnail: Thumbnails,
#[serde(default)]
#[serde_as(as = "DefaultOnError")] #[serde_as(as = "DefaultOnError")]
pub author_endpoint: Option<AuthorEndpoint>, pub author_endpoint: Option<AuthorEndpoint>,