use serde::{Deserialize, Serialize};
use crate::models::Color;
#[derive(Debug, Default, Clone, PartialEq, Deserialize, Serialize)]
#[serde(rename_all(deserialize = "camelCase"))]
pub struct Cover {
pub extra_large: Option<String>,
pub large: Option<String>,
pub medium: Option<String>,
pub color: Option<Color>,
}
impl Cover {
pub fn largest(&self) -> Option<&str> {
if let Some(extra_large) = self.extra_large.as_deref() {
Some(extra_large)
} else if let Some(large) = self.large.as_deref() {
Some(large)
} else if let Some(medium) = self.medium.as_deref() {
Some(medium)
} else {
None
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_largest_with_extra_large() {
let cover = Cover {
extra_large: Some("https://example.com/extra_large.jpg".to_string()),
large: Some("https://example.com/large.jpg".to_string()),
medium: Some("https://example.com/medium.jpg".to_string()),
color: None,
};
assert_eq!(cover.largest(), Some("https://example.com/extra_large.jpg"));
}
#[test]
fn test_largest_with_large() {
let cover = Cover {
extra_large: None,
large: Some("https://example.com/large.jpg".to_string()),
medium: Some("https://example.com/medium.jpg".to_string()),
color: None,
};
assert_eq!(cover.largest(), Some("https://example.com/large.jpg"));
}
#[test]
fn test_largest_with_medium() {
let cover = Cover {
extra_large: None,
large: None,
medium: Some("https://example.com/medium.jpg".to_string()),
color: None,
};
assert_eq!(cover.largest(), Some("https://example.com/medium.jpg"));
}
#[test]
fn test_largest_with_none() {
let cover = Cover {
extra_large: None,
large: None,
medium: None,
color: None,
};
assert_eq!(cover.largest(), None);
}
}