#[cfg(all(test, feature = "serde"))]
mod untyped_data {
use crate::Action;
#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)]
struct VendorPayload {
#[serde(rename = "sessionId")]
session_id: heapless::String<16>,
counter: i64,
}
fn payload() -> VendorPayload {
VendorPayload {
session_id: heapless::String::try_from("S-42").unwrap(),
counter: 7,
}
}
#[test]
fn v201_request_round_trips_a_caller_chosen_payload() {
use crate::v201::DataTransferRequest;
let request: DataTransferRequest<VendorPayload> = DataTransferRequest {
custom_data: None,
data: Some(payload()),
message_id: None,
vendor_id: heapless::String::try_from("com.example").unwrap(),
};
let mut buf = [0u8; 256];
let json = request.to_json_str(&mut buf).unwrap();
assert_eq!(
json,
r#"{"data":{"sessionId":"S-42","counter":7},"vendorId":"com.example"}"#
);
let parsed = DataTransferRequest::<VendorPayload>::from_json_str(json).unwrap();
assert_eq!(parsed, request);
}
#[test]
fn v201_response_round_trips_a_caller_chosen_payload() {
use crate::v201::common::DataTransferStatusEnum;
use crate::v201::DataTransferResponse;
let response: DataTransferResponse<VendorPayload> = DataTransferResponse {
custom_data: None,
data: Some(payload()),
status: DataTransferStatusEnum::Accepted,
status_info: None,
};
let mut buf = [0u8; 256];
let json = response.to_json_str(&mut buf).unwrap();
assert_eq!(
json,
r#"{"data":{"sessionId":"S-42","counter":7},"status":"Accepted"}"#
);
let parsed = DataTransferResponse::<VendorPayload>::from_json_str(json).unwrap();
assert_eq!(parsed, response);
}
#[test]
fn v21_request_round_trips_a_caller_chosen_payload() {
use crate::v21::DataTransferRequest;
let request: DataTransferRequest<VendorPayload> = DataTransferRequest {
custom_data: None,
data: Some(payload()),
message_id: None,
vendor_id: heapless::String::try_from("com.example").unwrap(),
};
let mut buf = [0u8; 256];
let json = request.to_json_str(&mut buf).unwrap();
let parsed = DataTransferRequest::<VendorPayload>::from_json_str(json).unwrap();
assert_eq!(parsed, request);
}
#[test]
fn the_default_payload_type_still_omits_the_field_entirely() {
use crate::v201::DataTransferRequest;
let request: DataTransferRequest = DataTransferRequest {
custom_data: None,
data: None,
message_id: None,
vendor_id: heapless::String::try_from("com.example").unwrap(),
};
let mut buf = [0u8; 128];
let json = request.to_json_str(&mut buf).unwrap();
assert_eq!(json, r#"{"vendorId":"com.example"}"#);
}
#[test]
fn action_name_is_available_for_any_payload_type() {
use crate::v201::DataTransferRequest;
assert_eq!(DataTransferRequest::<VendorPayload>::ACTION, "DataTransfer");
assert_eq!(DataTransferRequest::<()>::ACTION, "DataTransfer");
}
}