use std::collections::BTreeMap;
use jmap_types::Id;
use serde::{Deserialize, Serialize};
#[non_exhaustive]
#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub enum IncludeInAvailability {
#[serde(rename = "all")]
All,
#[serde(rename = "attending")]
Attending,
#[serde(rename = "none")]
None,
}
#[non_exhaustive]
#[derive(Debug, Clone, PartialEq, Eq, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct CalendarRights {
pub may_read_free_busy: bool,
pub may_read_items: bool,
pub may_write_all: bool,
pub may_write_own: bool,
pub may_update_private: bool,
#[serde(rename = "mayRSVP")]
pub may_rsvp: bool,
pub may_share: bool,
pub may_delete: bool,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub may_set_metadata: Option<bool>,
#[serde(flatten, default, skip_serializing_if = "serde_json::Map::is_empty")]
pub extra: serde_json::Map<String, serde_json::Value>,
}
#[non_exhaustive]
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Calendar {
#[serde(skip_serializing_if = "Option::is_none")]
pub id: Option<Id>,
pub name: String,
pub description: Option<String>,
pub color: Option<String>,
#[serde(default)]
pub sort_order: u32,
pub is_subscribed: bool,
#[serde(default = "default_true")]
pub is_visible: bool,
pub is_default: bool,
pub include_in_availability: IncludeInAvailability,
pub default_alerts_with_time: Option<BTreeMap<Id, serde_json::Value>>,
pub default_alerts_without_time: Option<BTreeMap<Id, serde_json::Value>>,
pub time_zone: Option<String>,
pub share_with: Option<BTreeMap<Id, CalendarRights>>,
pub my_rights: CalendarRights,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub metadata: Option<serde_json::Map<String, serde_json::Value>>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub private_metadata: Option<serde_json::Map<String, serde_json::Value>>,
#[serde(flatten, default, skip_serializing_if = "serde_json::Map::is_empty")]
pub extra: serde_json::Map<String, serde_json::Value>,
}
fn default_true() -> bool {
true
}