nuget_client/
model.rs

1mod version_range;
2
3use serde::{Deserialize, Serialize};
4use crate::util::string_or_list;
5
6pub use version_range::{RangeSpecifier, VersionRange};
7
8#[derive(Debug, Deserialize, Clone, Serialize)]
9#[non_exhaustive]
10#[serde(rename_all = "camelCase")]
11pub struct PackageMetadata {
12    #[serde(rename = "@id")]
13    pub uri_id: String,
14    #[serde(deserialize_with = "string_or_list")]
15    pub authors: Vec<String>,
16    #[serde(default="default")]
17    pub dependency_groups: Vec<DependencyGroup>,
18    pub deprecation: Option<Deprecation>,
19    pub description: Option<String>,
20    pub icon_url: Option<String>,
21    #[serde(rename="id")]
22    pub package_id: String,
23    pub language: Option<String>,
24    pub license_url: Option<String>,
25    pub license_expression: Option<String>,
26    #[serde(default="true_default")]
27    pub listed: bool,
28    pub min_client_version: Option<String>,
29    pub package_content: Option<String>,
30    pub project_url: Option<String>,
31    pub published: Option<String>,
32    pub readme_url: Option<String>,
33    #[serde(default="false_default")]
34    pub require_license_acceptance: bool,
35    pub summary: Option<String>,
36    #[serde(deserialize_with = "string_or_list", default="default")]
37    pub tags: Vec<String>,
38    pub title: Option<String>,
39    pub version: String,
40    pub vulnerabilities: Option<Vec<Vulnerability>>,
41}
42
43#[derive(Debug, Deserialize, Clone, Serialize)]
44#[non_exhaustive]
45#[serde(rename_all = "camelCase")]
46pub struct DependencyGroup {
47    pub target_framework: Option<String>,
48    #[serde(default="default")]
49    pub dependencies: Vec<Dependency>,
50}
51
52#[derive(Debug, Deserialize, Clone, Serialize)]
53#[non_exhaustive]
54#[serde(rename_all = "camelCase")]
55pub struct Dependency {
56    pub id: String,
57    pub range: Option<serde_json::Value>,
58    pub registration: Option<String>,
59}
60
61#[derive(Debug, Deserialize, Clone, Serialize)]
62#[non_exhaustive]
63#[serde(rename_all = "camelCase")]
64pub struct Deprecation {
65    pub reasons: Vec<String>,
66    pub message: Option<String>,
67    pub alternate_package: Option<AlternatePackage>,
68}
69
70#[derive(Debug, Deserialize, Clone, Serialize)]
71#[non_exhaustive]
72#[serde(rename_all = "camelCase")]
73pub struct AlternatePackage {
74    pub id: String,
75    pub range: Option<serde_json::Value>,
76}
77
78#[derive(Debug, Deserialize, Clone, Serialize)]
79#[non_exhaustive]
80#[serde(rename_all = "camelCase")]
81pub struct Vulnerability {
82    pub advisory_url: String,
83    pub severity: String, // string containing a number... TODO: parse
84}
85
86fn true_default() -> bool { true }
87fn false_default() -> bool { false }
88fn default<T>() -> T where T: Default { Default::default() }