csaf_models/
provider_meta.rs1use serde::{Deserialize, Serialize};
7
8#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
10pub struct ProviderMetadata {
11 pub canonical_url: String,
13
14 #[serde(default, skip_serializing_if = "Vec::is_empty")]
16 pub distributions: Vec<ProviderDistribution>,
17
18 pub last_updated: String,
20
21 #[serde(default, rename = "list_on_CSAF_aggregators")]
23 pub list_on_csaf_aggregators: bool,
24
25 pub metadata_version: String,
27
28 #[serde(default, rename = "mirror_on_CSAF_aggregators")]
30 pub mirror_on_csaf_aggregators: bool,
31
32 #[serde(default, skip_serializing_if = "Vec::is_empty")]
34 pub public_openpgp_keys: Vec<OpenPgpKey>,
35
36 pub publisher: ProviderPublisher,
38
39 pub role: String,
41}
42
43#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
45pub struct ProviderDistribution {
46 pub directory_url: String,
48}
49
50#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
52pub struct OpenPgpKey {
53 pub fingerprint: String,
55
56 pub url: String,
58}
59
60#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
62pub struct ProviderPublisher {
63 pub category: String,
65
66 pub contact_details: String,
68
69 pub name: String,
71
72 pub namespace: String,
74}
75
76#[cfg(test)]
77mod tests {
78 use super::*;
79
80 #[test]
81 fn test_deserialize_provider_metadata() {
82 let json = include_str!("../../../test/csaf/provider-metadata.json");
83 let meta: ProviderMetadata =
84 serde_json::from_str(json).expect("Failed to deserialize provider metadata");
85
86 assert_eq!(meta.metadata_version, "2.0");
87 assert_eq!(meta.role, "csaf_publisher");
88 assert_eq!(meta.publisher.category, "vendor");
89 assert!(meta.list_on_csaf_aggregators);
90 assert!(meta.mirror_on_csaf_aggregators);
91 assert_eq!(meta.public_openpgp_keys.len(), 1);
92 assert_eq!(
93 meta.public_openpgp_keys[0].fingerprint,
94 "D1DE14AA6D1980BD3FB67BF5C706DFBCAC5EFA64"
95 );
96 }
97
98 #[test]
99 fn test_roundtrip_provider_metadata() {
100 let json = include_str!("../../../test/csaf/provider-metadata.json");
101 let meta: ProviderMetadata = serde_json::from_str(json).expect("parse error");
102 let serialized = serde_json::to_string_pretty(&meta).expect("serialize error");
103 let meta2: ProviderMetadata = serde_json::from_str(&serialized).expect("re-parse error");
104 assert_eq!(meta, meta2);
105 }
106}