use crate::common::content_line::fold_line;
use crate::ical::calendar::Calendar;
pub(crate) fn write_calendar(cal: &Calendar) -> String {
let mut out = String::new();
write_line(&mut out, "BEGIN:VCALENDAR");
write_line(&mut out, &format!("VERSION:{}", cal.version));
write_line(&mut out, &format!("PRODID:{}", cal.prodid));
if let Some(ref calscale) = cal.calscale {
write_line(&mut out, &format!("CALSCALE:{}", calscale));
}
if let Some(ref method) = cal.method {
write_line(&mut out, &format!("METHOD:{}", method));
}
if let Some(ref name) = cal.name {
write_line(&mut out, &format!("X-WR-CALNAME:{}", name));
}
for prop in &cal.extra_properties {
write_line(&mut out, &prop.to_string());
}
for event in &cal.events {
write_line(&mut out, "BEGIN:VEVENT");
for prop in event.to_properties() {
write_line(&mut out, &prop.to_string());
}
for alarm in &event.alarms {
write_line(&mut out, "BEGIN:VALARM");
for prop in alarm.to_properties() {
write_line(&mut out, &prop.to_string());
}
write_line(&mut out, "END:VALARM");
}
write_line(&mut out, "END:VEVENT");
}
for todo in &cal.todos {
write_line(&mut out, "BEGIN:VTODO");
for prop in todo.to_properties() {
write_line(&mut out, &prop.to_string());
}
for alarm in &todo.alarms {
write_line(&mut out, "BEGIN:VALARM");
for prop in alarm.to_properties() {
write_line(&mut out, &prop.to_string());
}
write_line(&mut out, "END:VALARM");
}
write_line(&mut out, "END:VTODO");
}
write_line(&mut out, "END:VCALENDAR");
out
}
fn write_line(out: &mut String, line: &str) {
out.push_str(&fold_line(line));
}