use ews_proc_macros::operation_response;
use serde::Deserialize;
use xml_struct::XmlSerialize;
use crate::{BaseFolderId, DeleteType, MESSAGES_NS_URI};
#[derive(Clone, Debug, XmlSerialize)]
#[xml_struct(default_ns = MESSAGES_NS_URI)]
#[operation_response(EmptyFolderResponseMessage)]
pub struct EmptyFolder {
#[xml_struct(attribute)]
pub delete_type: DeleteType,
#[xml_struct(attribute)]
pub delete_sub_folders: bool,
pub folder_ids: Vec<BaseFolderId>,
}
#[derive(Clone, Debug, Deserialize, PartialEq, Eq)]
#[serde(rename_all = "PascalCase")]
pub struct EmptyFolderResponseMessage {}
#[cfg(test)]
mod test {
use crate::{
empty_folder::{EmptyFolder, EmptyFolderResponse, EmptyFolderResponseMessage},
test_utils::{assert_deserialized_content, assert_serialized_content, minify_xml},
BaseFolderId, DeleteType, ResponseClass, ResponseMessages,
};
#[test]
fn test_serialize_empty_folder() {
let empty_folder = EmptyFolder {
delete_type: DeleteType::HardDelete,
delete_sub_folders: true,
folder_ids: vec![BaseFolderId::FolderId {
id: "AAMkADEzOTExYZRAAA=".to_string(),
change_key: Some("AQAAAAA3vA==".to_string()),
}],
};
let expected = minify_xml(
r#"
<EmptyFolder xmlns="http://schemas.microsoft.com/exchange/services/2006/messages" DeleteType="HardDelete" DeleteSubFolders="true">
<FolderIds>
<t:FolderId Id="AAMkADEzOTExYZRAAA=" ChangeKey="AQAAAAA3vA=="/>
</FolderIds>
</EmptyFolder>"#,
);
assert_serialized_content(&empty_folder, "EmptyFolder", &expected);
}
#[test]
fn test_deserialize_empty_folder_response() {
let content = r#"
<m:EmptyFolderResponse
xmlns:m="http://schemas.microsoft.com/exchange/services/2006/messages"
xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types">
<m:ResponseMessages>
<m:EmptyFolderResponseMessage ResponseClass="Success">
<m:ResponseCode>NoError</m:ResponseCode>
</m:EmptyFolderResponseMessage>
</m:ResponseMessages>
</m:EmptyFolderResponse>"#;
let response = EmptyFolderResponse {
response_messages: ResponseMessages {
response_messages: vec![ResponseClass::Success(EmptyFolderResponseMessage {})],
},
};
assert_deserialized_content(content, response);
}
}