/* * Copyright Stalwart Labs Ltd. See the COPYING * file at the top-level directory of this distribution. * * Licensed under the Apache License, Version 2.0 or the MIT license * , at your * option. This file may not be copied, modified, or distributed * except according to those terms. */ use crate::{ client::Client, core::{ changes::{ChangesRequest, ChangesResponse}, get::GetRequest, query::{Comparator, Filter, QueryRequest, QueryResponse}, query_changes::{QueryChangesRequest, QueryChangesResponse}, request::{Arguments, Request}, response::{MailboxGetResponse, MailboxSetResponse}, set::{SetObject, SetRequest}, }, principal::ACL, Get, Method, Set, }; use super::{Mailbox, Property, Role}; impl Client { pub fn mailbox_create( &self, name: impl Into, parent_id: Option>, role: Role, ) -> crate::Result { let mut request = self.build(); let id = request .set_mailbox() .create() .name(name) .role(role) .parent_id(parent_id) .create_id() .unwrap(); request.send_single::()?.created(&id) } pub fn mailbox_rename( &self, id: &str, name: impl Into, ) -> crate::Result> { let mut request = self.build(); request.set_mailbox().update(id).name(name); request.send_single::()?.updated(id) } pub fn mailbox_move( &self, id: &str, parent_id: Option>, ) -> crate::Result> { let mut request = self.build(); request.set_mailbox().update(id).parent_id(parent_id); request.send_single::()?.updated(id) } pub fn mailbox_update_role(&self, id: &str, role: Role) -> crate::Result> { let mut request = self.build(); request.set_mailbox().update(id).role(role); request.send_single::()?.updated(id) } pub fn mailbox_update_acl( &self, id: &str, account_id: &str, acl: impl IntoIterator, ) -> crate::Result> { let mut request = self.build(); request.set_mailbox().update(id).acl(account_id, acl); request.send_single::()?.updated(id) } pub fn mailbox_update_sort_order( &self, id: &str, sort_order: u32, ) -> crate::Result> { let mut request = self.build(); request.set_mailbox().update(id).sort_order(sort_order); request.send_single::()?.updated(id) } pub fn mailbox_subscribe( &self, id: &str, is_subscribed: bool, ) -> crate::Result> { let mut request = self.build(); request .set_mailbox() .update(id) .is_subscribed(is_subscribed); request.send_single::()?.updated(id) } pub fn mailbox_destroy(&self, id: &str, delete_emails: bool) -> crate::Result<()> { let mut request = self.build(); request .set_mailbox() .destroy([id]) .arguments() .on_destroy_remove_emails(delete_emails); request.send_single::()?.destroyed(id) } pub fn mailbox_get( &self, id: &str, properties: Option>, ) -> crate::Result> { let mut request = self.build(); let get_request = request.get_mailbox().ids([id]); if let Some(properties) = properties { get_request.properties(properties.into_iter()); } request .send_single::() .map(|mut r| r.take_list().pop()) } pub fn mailbox_query( &self, filter: Option>>, sort: Option>>, ) -> crate::Result { let mut request = self.build(); let query_request = request.query_mailbox(); if let Some(filter) = filter { query_request.filter(filter); } if let Some(sort) = sort { query_request.sort(sort.into_iter()); } request.send_single::() } pub fn mailbox_changes( &self, since_state: impl Into, max_changes: usize, ) -> crate::Result>> { let mut request = self.build(); request .changes_mailbox(since_state) .max_changes(max_changes); request.send_single() } } impl Request<'_> { pub fn get_mailbox(&mut self) -> &mut GetRequest> { self.add_method_call( Method::GetMailbox, Arguments::mailbox_get(self.params(Method::GetMailbox)), ) .mailbox_get_mut() } pub fn send_get_mailbox(self) -> crate::Result { self.send_single() } pub fn changes_mailbox(&mut self, since_state: impl Into) -> &mut ChangesRequest { self.add_method_call( Method::ChangesMailbox, Arguments::changes(self.params(Method::ChangesMailbox), since_state.into()), ) .changes_mut() } pub fn send_changes_mailbox(self) -> crate::Result>> { self.send_single() } pub fn query_mailbox(&mut self) -> &mut QueryRequest> { self.add_method_call( Method::QueryMailbox, Arguments::mailbox_query(self.params(Method::QueryMailbox)), ) .mailbox_query_mut() } pub fn send_query_mailbox(self) -> crate::Result { self.send_single() } pub fn query_mailbox_changes( &mut self, since_query_state: impl Into, ) -> &mut QueryChangesRequest> { self.add_method_call( Method::QueryChangesMailbox, Arguments::mailbox_query_changes( self.params(Method::QueryChangesMailbox), since_query_state.into(), ), ) .mailbox_query_changes_mut() } pub fn send_query_mailbox_changes(self) -> crate::Result { self.send_single() } pub fn set_mailbox(&mut self) -> &mut SetRequest> { self.add_method_call( Method::SetMailbox, Arguments::mailbox_set(self.params(Method::SetMailbox)), ) .mailbox_set_mut() } pub fn send_set_mailbox(self) -> crate::Result { self.send_single() } }