use super::session_id::UnifiedSessionId; /// Session management commands issued by Channel to SessionManager #[derive(Debug, Clone)] pub enum SessionCommand { /// Create a new dialog in the given chat CreateDialog { channel: String, chat_id: String, title: Option, }, /// List all dialogs in a chat ListDialogs { channel: String, chat_id: String, include_archived: bool, }, /// Switch to a specific dialog (set as current) SwitchDialog { channel: String, chat_id: String, dialog_id: String, }, /// Get the current dialog for a chat GetCurrentDialog { channel: String, chat_id: String, }, /// Rename a dialog RenameDialog { session_id: UnifiedSessionId, title: String, }, /// Archive a dialog ArchiveDialog { session_id: UnifiedSessionId, }, /// Delete a dialog DeleteDialog { session_id: UnifiedSessionId, }, /// Clear dialog history ClearHistory { session_id: UnifiedSessionId, }, /// Get list of available slash commands GetSlashCommands { channel: String, chat_id: String, }, /// Execute a slash command ExecuteSlashCommand { command: String, args: Option, channel: String, chat_id: String, current_session_id: Option, }, } impl SessionCommand { /// Create a CreateDialog command pub fn create_dialog(channel: impl Into, chat_id: impl Into, title: Option) -> Self { Self::CreateDialog { channel: channel.into(), chat_id: chat_id.into(), title, } } /// Create a ListDialogs command pub fn list_dialogs(channel: impl Into, chat_id: impl Into, include_archived: bool) -> Self { Self::ListDialogs { channel: channel.into(), chat_id: chat_id.into(), include_archived, } } }