use chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize};
use super::{Availability, IntegrationError};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Calendar {
pub id: String,
pub title: String,
pub source: Option<String>,
pub color: Option<String>,
pub writable: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Event {
pub id: String,
pub calendar_id: String,
pub title: String,
pub start: DateTime<Utc>,
pub end: DateTime<Utc>,
#[serde(default)]
pub all_day: bool,
pub location: Option<String>,
pub notes: Option<String>,
#[serde(default)]
pub attendees: Vec<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CalendarListing {
#[serde(flatten)]
pub availability: Availability,
pub calendars: Vec<Calendar>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct EventListing {
#[serde(flatten)]
pub availability: Availability,
pub events: Vec<Event>,
}
pub fn list_calendars() -> Result<CalendarListing, IntegrationError> {
Ok(CalendarListing {
availability: current_backend_pending(),
calendars: vec![],
})
}
pub fn list_events(
_start: DateTime<Utc>,
_end: DateTime<Utc>,
_calendar_ids: &[String],
) -> Result<EventListing, IntegrationError> {
Ok(EventListing {
availability: current_backend_pending(),
events: vec![],
})
}
fn current_backend_pending() -> Availability {
#[cfg(target_os = "macos")]
{
Availability::pending(
"eventkit",
"EventKit backend not yet wired. API shape is stable; \
downstream apps can code against it now.",
)
}
#[cfg(target_os = "windows")]
{
Availability::pending(
"msgraph",
"MS Graph / Outlook MAPI backends not yet wired. API shape \
is stable; downstream apps can code against it now.",
)
}
#[cfg(target_os = "linux")]
{
Availability::pending(
"eds",
"Evolution Data Server + CalDAV backends not yet wired. \
API shape is stable; downstream apps can code against it now.",
)
}
#[cfg(not(any(target_os = "macos", target_os = "windows", target_os = "linux")))]
{
Availability::pending("none", "Unsupported OS — no calendar backend modeled.")
}
}