use crate::core::{
api_req::ApiRequest,
api_resp::{ApiResponseTrait, ResponseFormat},
};
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Calendar {
pub calendar_id: Option<String>,
pub summary: Option<String>,
pub description: Option<String>,
pub permissions: Option<CalendarPermission>,
pub color: Option<i32>,
pub r#type: Option<CalendarType>,
pub summary_info: Option<CalendarSummaryInfo>,
pub is_primary: Option<bool>,
pub role: Option<CalendarRole>,
pub create_time: Option<String>,
pub is_deleted: Option<bool>,
pub is_third_party: Option<bool>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CalendarPermission {
pub access_role: Option<CalendarAccessRole>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum CalendarAccessRole {
Unknown,
None,
FreeBusyReader,
Reader,
Writer,
Owner,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum CalendarType {
Unknown,
Primary,
Shared,
Google,
Resource,
Exchange,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CalendarSummaryInfo {
pub color: Option<i32>,
pub summary: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum CalendarRole {
Unknown,
None,
FreeBusyReader,
Reader,
Writer,
Owner,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CalendarEvent {
pub event_id: Option<String>,
pub organizer_calendar_id: Option<String>,
pub summary: Option<String>,
pub description: Option<String>,
pub start_time: Option<TimeInfo>,
pub end_time: Option<TimeInfo>,
pub is_all_day: Option<bool>,
pub recurrence: Option<String>,
pub reminders: Option<Vec<Reminder>>,
pub attendees: Option<Vec<EventAttendee>>,
pub meeting_rooms: Option<Vec<MeetingRoom>>,
pub location: Option<Location>,
pub color: Option<i32>,
pub status: Option<EventStatus>,
pub is_free_busy: Option<bool>,
pub creator: Option<EventCreator>,
pub organizer: Option<EventOrganizer>,
pub create_time: Option<String>,
pub update_time: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TimeInfo {
pub timestamp: Option<String>,
pub date: Option<String>,
pub timezone: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Reminder {
pub minutes: Option<i32>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct EventAttendee {
pub r#type: Option<AttendeeType>,
pub attendee_id: Option<String>,
pub rsvp_status: Option<RsvpStatus>,
pub is_optional: Option<bool>,
pub is_organizer: Option<bool>,
pub is_external: Option<bool>,
pub display_name: Option<String>,
pub chat_id: Option<String>,
pub room_id: Option<String>,
pub third_party_email: Option<String>,
pub operate_id: Option<String>,
pub resource_customization: Option<Vec<ResourceCustomization>>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum AttendeeType {
User,
Chat,
Resource,
ThirdParty,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum RsvpStatus {
NeedsAction,
Accept,
Decline,
Tentative,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MeetingRoom {
pub room_id: Option<String>,
pub display_name: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Location {
pub name: Option<String>,
pub address: Option<String>,
pub latitude: Option<f64>,
pub longitude: Option<f64>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum EventStatus {
Tentative,
Confirmed,
Cancelled,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct EventCreator {
pub user_id: Option<String>,
pub display_name: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct EventOrganizer {
pub user_id: Option<String>,
pub display_name: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ResourceCustomization {
pub index_id: Option<String>,
pub input_content: Option<String>,
pub options: Option<Vec<ResourceCustomizationOption>>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ResourceCustomizationOption {
pub option_key: Option<String>,
pub others_option: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CalendarAcl {
pub acl_id: Option<String>,
pub role: Option<CalendarRole>,
pub scope: Option<AclScope>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AclScope {
pub r#type: Option<AclScopeType>,
pub user_id: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum AclScopeType {
User,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct EmptyResponse {}
impl ApiResponseTrait for EmptyResponse {
fn data_format() -> ResponseFormat {
ResponseFormat::Data
}
}
#[derive(Default, Clone)]
pub struct BaseCalendarRequest {
pub api_req: ApiRequest,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum UserIdType {
OpenId,
UnionId,
UserId,
}
impl std::fmt::Display for UserIdType {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
UserIdType::OpenId => write!(f, "open_id"),
UserIdType::UnionId => write!(f, "union_id"),
UserIdType::UserId => write!(f, "user_id"),
}
}
}