forked from jmug/stoatchat
feat: search for links and author type
Signed-off-by: Zomatree <me@zomatree.live>
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
#[cfg(feature = "mongodb")]
|
||||
use ::mongodb::{ClientSession, SessionCursor};
|
||||
use revolt_result::{Result, ToRevoltError};
|
||||
use serde::Deserialize;
|
||||
|
||||
#[derive(Debug)]
|
||||
@@ -12,7 +13,7 @@ pub enum ChunkedDatabaseGenerator<T> {
|
||||
},
|
||||
|
||||
Reference {
|
||||
offset: i32,
|
||||
offset: usize,
|
||||
data: Vec<T>,
|
||||
},
|
||||
}
|
||||
@@ -20,33 +21,25 @@ pub enum ChunkedDatabaseGenerator<T> {
|
||||
impl<T: for<'d> Deserialize<'d> + Clone> ChunkedDatabaseGenerator<T> {
|
||||
#[cfg(feature = "mongodb")]
|
||||
pub fn new_mongo(session: ClientSession, cursor: SessionCursor<T>) -> Self {
|
||||
Self::MongoDb {
|
||||
session,
|
||||
cursor,
|
||||
}
|
||||
Self::MongoDb { session, cursor }
|
||||
}
|
||||
|
||||
pub fn new_reference(data: Vec<T>) -> Self {
|
||||
Self::Reference {
|
||||
offset: 0,
|
||||
data,
|
||||
}
|
||||
Self::Reference { offset: 0, data }
|
||||
}
|
||||
|
||||
pub async fn next(&mut self) -> Option<T> {
|
||||
pub async fn next(&mut self) -> Result<Option<T>> {
|
||||
match self {
|
||||
#[cfg(feature = "mongodb")]
|
||||
Self::MongoDb { session, cursor } => {
|
||||
let value = cursor.next(session).await;
|
||||
value.map(|val| val.expect("Failed to fetch the next message"))
|
||||
cursor.next(session).await.transpose().to_internal_error()
|
||||
}
|
||||
Self::Reference { offset, data } => {
|
||||
if data.len() as i32 >= *offset {
|
||||
None
|
||||
} else {
|
||||
let resp = &data[*offset as usize];
|
||||
if let Some(value) = data.get(*offset) {
|
||||
*offset += 1;
|
||||
Some(resp.clone())
|
||||
Ok(Some(value.clone()))
|
||||
} else {
|
||||
Ok(None)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user