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, }
85
86fn true_default() -> bool { true }
87fn false_default() -> bool { false }
88fn default<T>() -> T where T: Default { Default::default() }