use std::sync::{Arc, Mutex};
use langfuse_core::types::ScoreBody;
pub struct BatchQueue {
buffer: Arc<Mutex<Vec<ScoreBody>>>,
max_size: usize,
}
impl BatchQueue {
pub fn new(max_size: usize) -> Self {
Self {
buffer: Arc::new(Mutex::new(Vec::new())),
max_size,
}
}
pub fn push(&self, score: ScoreBody) -> bool {
let mut buf = self.buffer.lock().expect("BatchQueue lock poisoned");
buf.push(score);
buf.len() >= self.max_size
}
pub fn drain(&self) -> Vec<ScoreBody> {
let mut buf = self.buffer.lock().expect("BatchQueue lock poisoned");
std::mem::take(&mut *buf)
}
pub fn len(&self) -> usize {
self.buffer.lock().expect("BatchQueue lock poisoned").len()
}
pub fn is_empty(&self) -> bool {
self.buffer
.lock()
.expect("BatchQueue lock poisoned")
.is_empty()
}
}