use std::collections::HashMap;
use cheetah_string::CheetahString;
use crate::protocol::body::set_message_request_mode_request_body::SetMessageRequestModeRequestBody;
pub type MessageRequestModeMap =
HashMap<CheetahString , HashMap<CheetahString , SetMessageRequestModeRequestBody>>;
#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, Default)]
#[serde(rename_all = "camelCase")]
pub struct MessageRequestModeSerializeWrapper {
message_request_mode_map: MessageRequestModeMap,
}
impl MessageRequestModeSerializeWrapper {
pub fn new(message_request_mode_map: MessageRequestModeMap) -> Self {
Self {
message_request_mode_map,
}
}
pub fn message_request_mode_map(&self) -> &MessageRequestModeMap {
&self.message_request_mode_map
}
pub fn into_inner(self) -> MessageRequestModeMap {
self.message_request_mode_map
}
pub fn from_inner(message_request_mode_map: MessageRequestModeMap) -> Self {
Self {
message_request_mode_map,
}
}
pub fn set_message_request_mode_map(&mut self, map: MessageRequestModeMap) {
self.message_request_mode_map = map;
}
}
#[cfg(test)]
mod tests {
use super::*;
use crate::protocol::body::set_message_request_mode_request_body::SetMessageRequestModeRequestBody;
#[test]
fn wrapper_methods_and_serde_preserve_the_nested_map() {
let mut map = MessageRequestModeMap::new();
let mut group_map = HashMap::new();
group_map.insert(
CheetahString::from("group1"),
SetMessageRequestModeRequestBody::default(),
);
map.insert(CheetahString::from("topic1"), group_map);
let mut wrapper = MessageRequestModeSerializeWrapper::new(map);
assert_eq!(wrapper.message_request_mode_map().len(), 1);
assert!(wrapper
.message_request_mode_map()
.contains_key(&CheetahString::from("topic1")));
let encoded = serde_json::to_vec(&wrapper).expect("serialize request mode map");
let decoded: MessageRequestModeSerializeWrapper =
serde_json::from_slice(&encoded).expect("deserialize request mode map");
wrapper.set_message_request_mode_map(decoded.into_inner());
let map = MessageRequestModeSerializeWrapper::from_inner(wrapper.into_inner()).into_inner();
let group_map = map
.get(&CheetahString::from("topic1"))
.expect("topic should survive the round trip");
assert!(group_map.contains_key(&CheetahString::from("group1")));
}
}