Skip to main content

awp_types/
request.rs

1use serde::{Deserialize, Serialize};
2use uuid::Uuid;
3
4use crate::{AwpVersion, RequesterType, TrustLevel};
5
6/// AWP protocol request envelope.
7///
8/// Wraps an inbound request with AWP metadata including trust level,
9/// requester type, and protocol version.
10#[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}