io-calendar 0.0.1

Set of I/O-free coroutines to manage calendars
use std::path::Path;

use io_fs::io::FsIo;
use io_vdir::{
    constants::ICS,
    coroutines::delete_item::{
        DeleteItem as DeleteVdirItem, DeleteItemError as DeleteVdirItemError,
        DeleteItemResult as DeleteVdirItemResult,
    },
};
use thiserror::Error;

#[derive(Clone, Debug, Error)]
pub enum DeleteCalendarItemError {
    #[error("Delete calendar item error")]
    DeleteVdirItem(#[from] DeleteVdirItemError),
}

#[derive(Clone, Debug)]
pub enum DeleteCalendarItemResult {
    Ok,
    Err(DeleteCalendarItemError),
    Io(FsIo),
}

#[derive(Debug)]
pub struct DeleteCalendarItem(DeleteVdirItem);

impl DeleteCalendarItem {
    pub fn new(root: impl AsRef<Path>, calendar_id: impl AsRef<str>, id: impl AsRef<str>) -> Self {
        let path = root
            .as_ref()
            .join(calendar_id.as_ref())
            .join(id.as_ref())
            .with_extension(ICS);

        Self(DeleteVdirItem::new(path))
    }

    pub fn resume(&mut self, input: Option<FsIo>) -> DeleteCalendarItemResult {
        match self.0.resume(input) {
            DeleteVdirItemResult::Ok => DeleteCalendarItemResult::Ok,
            DeleteVdirItemResult::Err(err) => DeleteCalendarItemResult::Err(err.into()),
            DeleteVdirItemResult::Io(io) => DeleteCalendarItemResult::Io(io),
        }
    }
}