1use serde::{Deserialize, Serialize};
2use uuid::Uuid;
3
4use crate::{AwpVersion, RequesterType, TrustLevel};
5
6#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
11#[serde(rename_all = "camelCase")]
12pub struct AwpRequest {
13 pub id: Uuid,
14 pub trust_level: TrustLevel,
15 pub requester_type: RequesterType,
16 pub version: AwpVersion,
17 pub payload: serde_json::Value,
18}
19
20#[cfg(test)]
21mod tests {
22 use super::*;
23 use crate::CURRENT_VERSION;
24
25 #[test]
26 fn test_serde_round_trip() {
27 let req = AwpRequest {
28 id: Uuid::now_v7(),
29 trust_level: TrustLevel::Known,
30 requester_type: RequesterType::Agent,
31 version: CURRENT_VERSION,
32 payload: serde_json::json!({"key": "value"}),
33 };
34 let json = serde_json::to_string(&req).unwrap();
35 let deserialized: AwpRequest = serde_json::from_str(&json).unwrap();
36 assert_eq!(req, deserialized);
37 }
38
39 #[test]
40 fn test_camel_case_serialization() {
41 let req = AwpRequest {
42 id: Uuid::now_v7(),
43 trust_level: TrustLevel::Anonymous,
44 requester_type: RequesterType::Human,
45 version: CURRENT_VERSION,
46 payload: serde_json::json!(null),
47 };
48 let json = serde_json::to_string(&req).unwrap();
49 assert!(json.contains("trustLevel"));
50 assert!(json.contains("requesterType"));
51 assert!(!json.contains("trust_level"));
52 assert!(!json.contains("requester_type"));
53 }
54}