1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
////////////////////////////////////////////////////////////////////////////////
// This Source Code Form is subject to the terms of the Mozilla Public         /
// License, v. 2.0. If a copy of the MPL was not distributed with this         /
// file, You can obtain one at https://mozilla.org/MPL/2.0/.                   /
////////////////////////////////////////////////////////////////////////////////

#[derive(Clone, Debug, PartialEq, Eq, Default, Serialize, Deserialize)]
pub struct Listing {
    #[serde(skip_serializing_if = "Option::is_none")]
    pub name: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub full_name: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub owner: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub package_url: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub donation_link: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub date_created: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub date_updated: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub uuid4: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub rating_score: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub is_pinned: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub is_deprecated: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub has_nsfw_content: Option<bool>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub categories: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub versions: Option<String>,
}

impl Listing {
    #[must_use]
    pub fn new() -> Listing {
        Listing {
            name: None,
            full_name: None,
            owner: None,
            package_url: None,
            donation_link: None,
            date_created: None,
            date_updated: None,
            uuid4: None,
            rating_score: None,
            is_pinned: None,
            is_deprecated: None,
            has_nsfw_content: None,
            categories: None,
            versions: None,
        }
    }
}

#[derive(Clone, Debug, PartialEq, Eq, Default, Serialize, Deserialize)]
pub struct PackageVersion {
    pub date_created: String,
    pub download_count: u32,
    pub download_url: String,
    pub install_url: String,
    pub version_number: String,
}

impl PackageVersion {
    #[must_use]
    pub fn new(
        date_created: String,
        download_count: u32,
        download_url: String,
        install_url: String,
        version_number: String,
    ) -> PackageVersion {
        PackageVersion {
            date_created,
            download_count,
            download_url,
            install_url,
            version_number,
        }
    }
}