Skip to main content

mermaid_cli/tui/state/
operation.rs

1/// Operation state management
2///
3/// Minimal state for tracking active operations.
4
5use std::collections::VecDeque;
6
7/// Operation state - tracks file reading, tool calls, and queued messages
8pub struct OperationState {
9    /// Track if FILE_READ feedback is pending
10    pub pending_file_read: bool,
11    /// Status text to show during file reading
12    pub reading_file_status: Option<String>,
13    /// Accumulated tool calls during streaming (persists across process_stream_chunks calls)
14    pub accumulated_tool_calls: Vec<crate::models::ToolCall>,
15    /// Queued messages - typed while model is generating, will be sent in order
16    pub queued_messages: VecDeque<String>,
17}
18
19impl OperationState {
20    /// Create a new OperationState with default values
21    pub fn new() -> Self {
22        Self {
23            pending_file_read: false,
24            reading_file_status: None,
25            accumulated_tool_calls: Vec::new(),
26            queued_messages: VecDeque::new(),
27        }
28    }
29
30    /// Queue a message to be sent after current generation
31    pub fn queue_message(&mut self, message: String) {
32        self.queued_messages.push_back(message);
33    }
34
35    /// Take the next queued message (removes from front of queue)
36    pub fn take_queued_message(&mut self) -> Option<String> {
37        self.queued_messages.pop_front()
38    }
39
40    /// Check if there are any queued messages
41    pub fn has_queued_message(&self) -> bool {
42        !self.queued_messages.is_empty()
43    }
44
45    /// Get all queued messages for display (doesn't remove them)
46    pub fn get_queued_messages(&self) -> &VecDeque<String> {
47        &self.queued_messages
48    }
49
50    /// Get the count of queued messages
51    pub fn queued_message_count(&self) -> usize {
52        self.queued_messages.len()
53    }
54}
55
56impl Default for OperationState {
57    fn default() -> Self {
58        Self::new()
59    }
60}