Skip to main content

ferrex_model/image/
metadata.rs

1use std::fmt;
2
3#[derive(Debug, Clone, PartialEq)]
4#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5#[cfg_attr(
6    feature = "rkyv",
7    derive(rkyv::Archive, rkyv::Serialize, rkyv::Deserialize)
8)]
9#[cfg_attr(feature = "rkyv", rkyv(derive(Debug, PartialEq, Eq)))]
10pub struct ImageMetadata {
11    pub file_path: String,
12    pub width: u64,
13    pub height: u64,
14    pub aspect_ratio: f64,
15    pub iso_639_1: Option<String>,
16    pub vote_average: f64,
17    pub vote_count: u64,
18}
19
20#[derive(Debug, Clone, PartialEq)]
21#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
22#[cfg_attr(
23    feature = "rkyv",
24    derive(rkyv::Archive, rkyv::Serialize, rkyv::Deserialize)
25)]
26#[cfg_attr(feature = "rkyv", rkyv(derive(Debug, PartialEq, Eq)))]
27pub struct ImageWithMetadata {
28    pub endpoint: String,
29    pub metadata: ImageMetadata,
30}
31
32#[derive(Clone, Default, PartialEq)]
33#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
34#[cfg_attr(
35    feature = "rkyv",
36    derive(rkyv::Archive, rkyv::Serialize, rkyv::Deserialize)
37)]
38#[cfg_attr(feature = "rkyv", rkyv(derive(Debug, PartialEq, Eq)))]
39pub struct MediaImages {
40    pub posters: Vec<ImageWithMetadata>,
41    pub backdrops: Vec<ImageWithMetadata>,
42    pub logos: Vec<ImageWithMetadata>,
43    pub stills: Vec<ImageWithMetadata>,
44}
45
46impl fmt::Debug for MediaImages {
47    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
48        f.debug_struct("MediaImages")
49            .field("poster_count", &self.posters.len())
50            .field("backdrop_count", &self.backdrops.len())
51            .field("logo_count", &self.logos.len())
52            .field("still_count", &self.stills.len())
53            .finish()
54    }
55}