use alloc::vec::Vec;
use log::trace;
use url::Url;
use crate::{
coroutine::*,
rfc4918::{
WebdavAuth,
delete::Delete,
send::{SendError, SendOk},
},
rfc6352::addressbook::join_path,
};
#[derive(Debug)]
pub struct DeleteAddressbook {
state: State,
}
impl DeleteAddressbook {
pub fn new(
base_url: &Url,
auth: &WebdavAuth,
user_agent: &str,
home_set_path: &str,
addressbook_id: &str,
) -> Self {
let path = join_path(home_set_path, addressbook_id);
Self {
state: State::Delete(Delete::new(base_url, auth, user_agent, &path, None)),
}
}
}
impl WebdavCoroutine for DeleteAddressbook {
type Yield = WebdavYield;
type Return = Result<SendOk<Vec<u8>>, SendError>;
fn resume(&mut self, arg: Option<&[u8]>) -> WebdavCoroutineState<Self::Yield, Self::Return> {
trace!("sending request");
match &mut self.state {
State::Delete(delete) => delete.resume(arg),
}
}
}
#[derive(Debug)]
enum State {
Delete(Delete),
}