feat: search for links and author type

Signed-off-by: Zomatree <me@zomatree.live>
This commit is contained in:
Zomatree
2026-04-09 03:54:14 +01:00
parent b7ed543156
commit 9c62568132
27 changed files with 615 additions and 368 deletions
+10 -17
View File
@@ -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)
}
}
}