io-calendar 0.0.1

Set of I/O-free coroutines to manage calendars
use io_stream::io::StreamIo;
use io_vdir::constants::ICS;

use crate::{
    caldav::{config::CaldavConfig, request::Request},
    item::CalendarItem,
};

use super::send::{Empty, Send, SendResult};

#[derive(Debug)]
pub struct CreateCalendarItem(Send<Empty>);

impl CreateCalendarItem {
    pub fn new(config: &CaldavConfig, item: CalendarItem) -> Self {
        let path = format!("/{}/{}.{ICS}", item.calendar_id, item.id);
        let request = Request::put(config, path).content_type_ical();
        let body = item.to_string().into_bytes();
        Self(Send::new(request, body))
    }

    pub fn resume(&mut self, arg: Option<StreamIo>) -> SendResult<Empty> {
        self.0.resume(arg)
    }
}