1use serde::{Deserialize, Serialize};
2
3use crate::{AwpVersion, TrustLevel};
4
5#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
9#[serde(rename_all = "camelCase")]
10pub struct AwpDiscoveryDocument {
11 pub version: AwpVersion,
12 pub site_name: String,
13 pub site_description: String,
14 pub capability_manifest_url: String,
15 pub a2a_endpoint_url: String,
16 pub events_endpoint_url: String,
17 pub health_endpoint_url: String,
18 pub supported_trust_levels: Vec<TrustLevel>,
19}
20
21#[cfg(test)]
22mod tests {
23 use super::*;
24 use crate::CURRENT_VERSION;
25
26 #[test]
27 fn test_serde_round_trip() {
28 let doc = AwpDiscoveryDocument {
29 version: CURRENT_VERSION,
30 site_name: "Test Site".to_string(),
31 site_description: "A test site".to_string(),
32 capability_manifest_url: "https://example.com/awp/manifest".to_string(),
33 a2a_endpoint_url: "https://example.com/awp/a2a".to_string(),
34 events_endpoint_url: "https://example.com/awp/events/subscribe".to_string(),
35 health_endpoint_url: "https://example.com/awp/health".to_string(),
36 supported_trust_levels: vec![
37 TrustLevel::Anonymous,
38 TrustLevel::Known,
39 TrustLevel::Partner,
40 TrustLevel::Internal,
41 ],
42 };
43 let json = serde_json::to_string(&doc).unwrap();
44 let deserialized: AwpDiscoveryDocument = serde_json::from_str(&json).unwrap();
45 assert_eq!(doc, deserialized);
46 }
47}