diff --git a/README.md b/README.md index 818e37d..d702516 100644 --- a/README.md +++ b/README.md @@ -2,4 +2,5 @@ This rust crate holds types that represent data structures and operations for the Exchange Web Services API, as well as the necessary infrastructure to -serialize and deserialize them to/from XML. \ No newline at end of file +serialize and deserialize them to/from XML. + diff --git a/src/types.rs b/src/types.rs index a9be7b7..0f74ea8 100644 --- a/src/types.rs +++ b/src/types.rs @@ -11,6 +11,7 @@ pub mod soap; pub mod create_folder; pub mod create_item; +pub mod delete_folder; pub mod delete_item; pub mod get_folder; pub mod get_item; diff --git a/src/types/common.rs b/src/types/common.rs index 26f0b02..b37ac0a 100644 --- a/src/types/common.rs +++ b/src/types/common.rs @@ -769,6 +769,17 @@ pub struct FolderId { pub change_key: Option, } +/// The manner in which items or folders are deleted. +/// +/// See +#[derive(Clone, Debug, XmlSerialize)] +#[xml_struct(text)] +pub enum DeleteType { + HardDelete, + MoveToDeletedItems, + SoftDelete, +} + /// An identifier for an Exchange item. /// /// See diff --git a/src/types/delete_folder.rs b/src/types/delete_folder.rs new file mode 100644 index 0000000..e7c8d02 --- /dev/null +++ b/src/types/delete_folder.rs @@ -0,0 +1,75 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +use serde::Deserialize; +use xml_struct::XmlSerialize; + +use crate::{ + types::sealed::EnvelopeBodyContents, BaseFolderId, DeleteType, Operation, OperationResponse, + ResponseClass, ResponseCode, MESSAGES_NS_URI, +}; + +/// A request to delete one or more folders. +/// +/// See +#[derive(Clone, Debug, XmlSerialize)] +#[xml_struct(default_ns = MESSAGES_NS_URI)] +pub struct DeleteFolder { + /// The method the EWS server will use to perform the deletion. + /// + /// See + #[xml_struct(attribute)] + pub delete_type: DeleteType, + + /// A list of folders to delete. + /// + /// See + pub folder_ids: Vec, +} + +impl Operation for DeleteFolder { + type Response = DeleteFolderResponse; +} + +impl EnvelopeBodyContents for DeleteFolder { + fn name() -> &'static str { + "DeleteFolder" + } +} + +/// A response to a [`DeleteFolder`] request. +/// +/// See +#[derive(Clone, Debug, Deserialize)] +#[serde(rename_all = "PascalCase")] +pub struct DeleteFolderResponse { + pub response_messages: ResponseMessages, +} + +impl OperationResponse for DeleteFolderResponse {} + +impl EnvelopeBodyContents for DeleteFolderResponse { + fn name() -> &'static str { + "DeleteFolderResponse" + } +} + +#[derive(Clone, Debug, Deserialize)] +#[serde(rename_all = "PascalCase")] +pub struct ResponseMessages { + pub delete_folder_response_message: Vec, +} + +#[derive(Clone, Debug, Deserialize)] +#[serde(rename_all = "PascalCase")] +pub struct DeleteFolderResponseMessage { + /// The status of the corresponding request, i.e. whether it succeeded or + /// resulted in an error. + #[serde(rename = "@ResponseClass")] + pub response_class: ResponseClass, + + pub response_code: Option, + + pub message_text: Option, +} diff --git a/src/types/delete_item.rs b/src/types/delete_item.rs index 54d22ae..f1e7143 100644 --- a/src/types/delete_item.rs +++ b/src/types/delete_item.rs @@ -7,20 +7,10 @@ use xml_struct::XmlSerialize; use crate::types::sealed::EnvelopeBodyContents; use crate::{ - BaseItemId, Operation, OperationResponse, ResponseClass, ResponseCode, MESSAGES_NS_URI, + BaseItemId, DeleteType, Operation, OperationResponse, ResponseClass, ResponseCode, + MESSAGES_NS_URI, }; -/// The manner in which the item or items are deleted. -/// -/// See -#[derive(Debug, XmlSerialize)] -#[xml_struct(text)] -pub enum DeleteType { - HardDelete, - SoftDelete, - MoveToDeletedItems, -} - /// Whether to send meeting cancellations when deleting a calendar item. /// /// See