mod ical;
mod property;
use std::collections::BTreeMap;
pub use crate::component::ical::component::{IcalCalendar, IcalEvent};
pub use crate::component::vcard::component::VcardContact;
pub use crate::parser::ContentLine;
pub trait Emitter {
fn generate(&self) -> String;
}
impl<K, T: Emitter> Emitter for BTreeMap<K, T> {
fn generate(&self) -> String {
self.values().map(Emitter::generate).collect()
}
}
impl<T: Emitter> Emitter for Vec<T> {
fn generate(&self) -> String {
self.iter().map(Emitter::generate).collect()
}
}
mod helper {
#[macro_export]
macro_rules! ical_param {
($key:literal, $($prop:expr),+) => {
(String::from($key), vec![$(String::from($prop),)+])
};
}
#[macro_export]
macro_rules! ical_property {
($name:literal, $value:expr) => {
ContentLine {
name: String::from($name),
value: $value.into(),
params: vec![].into(),
}
};
($name:literal, $value:expr, $($params:expr),+) => {
ContentLine {
name: String::from($name),
value: String::from($value),
params: vec![$($params,)+].into(),
}
};
}
}