use mongodb::Cursor;
use mongodb::bson::Document;
use std::time::Instant;
use std::fmt;
pub struct CursorState {
pub collection_name: String,
pub cursor: Cursor<Document>,
pub documents_retrieved: usize,
pub batch_size: u32,
pub created_at: Instant,
}
impl CursorState {
pub fn new(
collection_name: String,
cursor: Cursor<Document>,
batch_size: u32,
) -> Self {
Self {
collection_name,
cursor,
documents_retrieved: 0,
batch_size,
created_at: Instant::now(),
}
}
pub fn is_expired(&self) -> bool {
self.created_at.elapsed().as_secs() > 600
}
pub fn update_retrieved(&mut self, count: usize) {
self.documents_retrieved += count;
}
#[allow(dead_code)]
pub fn collection_name(&self) -> &str {
&self.collection_name
}
pub fn documents_retrieved(&self) -> usize {
self.documents_retrieved
}
}
impl fmt::Debug for CursorState {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
f.debug_struct("CursorState")
.field("collection_name", &self.collection_name)
.field("documents_retrieved", &self.documents_retrieved)
.field("batch_size", &self.batch_size)
.field("created_at", &self.created_at)
.field("cursor", &"<MongoDB Cursor>")
.finish()
}
}