| 263 | } |
| 264 | |
| 265 | pub fn enqueue( |
| 266 | &self, |
| 267 | session_id: &str, |
| 268 | turn: T, |
| 269 | priority: DialogQueuePriority, |
| 270 | ) -> Result<usize, DialogTurnQueueError> { |
| 271 | let mut queue = self.inner.entry(session_id.to_string()).or_default(); |
| 272 | if queue.len() >= self.max_depth { |
| 273 | return Err(DialogTurnQueueError::Full { |
| 274 | session_id: session_id.to_string(), |
| 275 | max_depth: self.max_depth, |
| 276 | }); |
| 277 | } |
| 278 | |
| 279 | let queued = QueuedDialogTurn { priority, turn }; |
| 280 | let insert_at = queue |
| 281 | .iter() |
| 282 | .position(|existing| existing.priority < queued.priority); |
| 283 | if let Some(index) = insert_at { |
| 284 | queue.insert(index, queued); |
| 285 | } else { |
| 286 | queue.push_back(queued); |
| 287 | } |
| 288 | |
| 289 | Ok(queue.len()) |
| 290 | } |
| 291 | |
| 292 | pub fn clear(&self, session_id: &str) -> usize { |
| 293 | self.inner |