use crate::components::{Parameter, Parameters, Property};
use std::borrow::Cow;
use std::collections::BTreeMap;
property!(CalScale, "CALSCALE");
property!(Method, "METHOD");
property!(ProdID, "PRODID");
property!(Version, "VERSION");
property!(Attach, "ATTACH");
property!(Categories, "CATEGORIES");
property!(Class, "CLASS");
property!(Comment, "COMMENT");
property!(Description, "DESCRIPTION");
property!(Geo, "GEO");
property!(Location, "LOCATION");
property!(PercentComplete, "PERCENT-COMPLETE");
property!(Priority, "PRIORITY");
property!(Resources, "RESOURCES");
property!(Status, "STATUS");
property!(Summary, "SUMMARY");
property!(Completed, "COMPLETED");
property!(DtEnd, "DTEND");
property!(Due, "DUE");
property!(DtStart, "DTSTART");
property!(Duration, "DURATION");
property!(FreeBusyTime, "FREEBUSY");
property!(Transp, "TRANSP");
property!(TzID, "TZID");
property!(TzName, "TZNAME");
property!(TzOffsetFrom, "TZOFFSETFROM");
property!(TzOffsetTo, "TZOFFSETTO");
property!(TzURL, "TZURL");
property!(Attendee, "ATTENDEE");
property!(Contact, "CONTACT");
property!(Organizer, "ORGANIZER");
property!(RecurrenceID, "RECURRENCE-ID");
property!(RelatedTo, "RELATED-TO");
property!(URL, "URL");
property!(UID, "UID");
property!(ExDate, "EXDATE");
property!(RDate, "RDATE");
property!(RRule, "RRULE");
property!(Action, "ACTION");
property!(Repeat, "REPEAT");
property!(Trigger, "TRIGGER");
property!(Created, "CREATED");
property!(DtStamp, "DTSTAMP");
property!(LastModified, "LAST-MODIFIED");
property!(Sequence, "SEQUENCE");
property!(RequestStatus, "REQUEST-STATUS");
impl Class<'_> {
pub fn public() -> Self {
Self::new("PUBLIC")
}
pub fn private() -> Self {
Self::new("PRIVATE")
}
pub fn confidential() -> Self {
Self::new("CONFIDENTIAL")
}
}
impl Status<'_> {
pub fn tentative() -> Self {
Self::new("TENTATIVE")
}
pub fn confirmed() -> Self {
Self::new("CONFIRMED")
}
pub fn cancelled() -> Self {
Self::new("CANCELLED")
}
pub fn needs_action() -> Self {
Self::new("NEEDS-ACTION")
}
pub fn completed() -> Self {
Self::new("COMPLETED")
}
pub fn in_process() -> Self {
Self::new("IN-PROCESS")
}
pub fn draft() -> Self {
Self::new("DRAFT")
}
pub fn final_() -> Self {
Self::new("FINAL")
}
}
impl Transp<'_> {
pub fn opaque() -> Self {
Self::new("OPAQUE")
}
pub fn transparent() -> Self {
Self::new("TRANSPARENT")
}
}
impl Action<'_> {
pub fn audio() -> Self {
Self::new("AUDIO")
}
pub fn display() -> Self {
Self::new("DISPLAY")
}
pub fn email() -> Self {
Self::new("EMAIL")
}
}
impl Default for Class<'_> {
fn default() -> Self {
Self::public()
}
}
impl Default for Transp<'_> {
fn default() -> Self {
Self::opaque()
}
}
impl Default for CalScale<'_> {
fn default() -> Self {
Self {
value: Cow::Borrowed("GREGORIAN"),
parameters: BTreeMap::new(),
}
}
}
impl Default for Priority<'_> {
fn default() -> Self {
Self {
value: Cow::Borrowed("0"),
parameters: BTreeMap::new(),
}
}
}
impl Default for Repeat<'_> {
fn default() -> Self {
Self {
value: Cow::Borrowed("0"),
parameters: BTreeMap::new(),
}
}
}
impl Default for Sequence<'_> {
fn default() -> Self {
Self {
value: Cow::Borrowed("0"),
parameters: BTreeMap::new(),
}
}
}
#[cfg(feature = "rfc7986")]
pub use self::rfc7986::*;
#[cfg(feature = "rfc7986")]
mod rfc7986 {
use crate::components::{Parameter, Parameters, Property};
use std::borrow::Cow;
use std::collections::BTreeMap;
property!(Name, "NAME");
property_with_parameter!(RefreshInterval, "REFRESH-INTERVAL", "DURATION");
property_with_parameter!(Source, "SOURCE", "URI");
property!(Color, "COLOR");
property_with_parameter!(Conference, "CONFERENCE", "URI");
#[derive(Debug, Clone, PartialEq, Eq, Hash, PartialOrd, Ord)]
pub struct Image<'a> {
value: Cow<'a, str>,
parameters: Parameters<'a>,
}
impl<'a> Image<'a> {
pub fn uri<S>(value: S) -> Self
where
S: Into<Cow<'a, str>>,
{
Image {
value: value.into(),
parameters: parameters!("VALUE" => "URI"),
}
}
pub fn binary<S>(value: S) -> Self
where
S: Into<Cow<'a, str>>,
{
Image {
value: value.into(),
parameters: parameters!("ENCODING" => "BASE64"; "VALUE" => "BINARY"),
}
}
}
impl_add_parameters!(Image);
impl_from_prop!(Image, "IMAGE");
}