use chrono::{DateTime, Utc}; use serde::{Deserialize, Serialize}; use uuid::Uuid; use crate::event::{RoomInfo, UserInfo, WorkspaceInfo}; #[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)] #[serde(rename_all = "snake_case")] pub enum InviteEventType { Created, Accepted, Rejected, Revoked, } #[derive(Debug, Clone, Serialize, Deserialize)] #[serde(tag = "type")] pub enum InviteEvent { #[serde(rename = "invite.created")] Created(InviteCreatedService), #[serde(rename = "invite.accepted")] Accepted(InviteAcceptedService), #[serde(rename = "invite.rejected")] Rejected(InviteRejectedService), #[serde(rename = "invite.revoked")] Revoked(InviteRevokedService), } #[derive(Debug, Clone, Serialize, Deserialize)] pub struct InviteCreatedService { pub id: Uuid, pub workspace: WorkspaceInfo, pub room: Option, pub inviter: UserInfo, pub invitee: Option, pub code: String, pub max_uses: Option, pub expires_at: Option>, pub created_at: DateTime, } #[derive(Debug, Clone, Serialize, Deserialize)] pub struct InviteAcceptedService { pub id: Uuid, pub workspace: WorkspaceInfo, pub room: Option, pub user: UserInfo, pub accepted_at: DateTime, } #[derive(Debug, Clone, Serialize, Deserialize)] pub struct InviteRejectedService { pub id: Uuid, pub workspace: WorkspaceInfo, pub user: UserInfo, pub rejected_at: DateTime, } #[derive(Debug, Clone, Serialize, Deserialize)] pub struct InviteRevokedService { pub id: Uuid, pub workspace: WorkspaceInfo, pub revoked_by: UserInfo, pub revoked_at: DateTime, } #[derive(Debug, Clone, Serialize, Deserialize)] pub struct InviteCreateClient { pub workspace: WorkspaceInfo, pub room: Option, pub max_uses: Option, pub expires_at: Option>, } #[derive(Debug, Clone, Serialize, Deserialize)] pub struct InviteAcceptClient { pub code: String, } #[derive(Debug, Clone, Serialize, Deserialize)] pub struct InviteRevokeClient { pub id: Uuid, }