query: add count param

This commit is contained in:
nym21
2025-06-08 18:26:59 +02:00
parent 5a6b71cbeb
commit e0bf1d736f
3 changed files with 20 additions and 3 deletions

View File

@@ -23,8 +23,11 @@ pub struct Params {
pub from: Option<i64>,
#[clap(short, long, allow_hyphen_values = true)]
#[serde(default, alias = "t")]
/// Inclusive ending index, if negative will be from the end
/// Exclusive ending index, if negative will be from the end, overrides 'count'
pub to: Option<i64>,
#[serde(default, alias = "c")]
/// Number of values
pub count: Option<usize>,
#[clap(short = 'F', long)]
/// Format of the output
pub format: Option<Format>,

View File

@@ -40,13 +40,27 @@ fn req_to_response_res(
format,
from,
index,
to,
mut to,
count,
values,
}): AxumQuery<Params>,
AppState { query, .. }: AppState,
) -> color_eyre::Result<Response> {
let index = Index::try_from(index.as_str())?;
if to.is_none() {
if let Some(c) = count {
let c = c as i64;
if let Some(f) = from {
if f.is_positive() || f.abs() > c {
to.replace(f + c);
}
} else {
to.replace(c);
}
}
}
let vecs = query.search(
index,
&values.iter().map(|v| v.as_str()).collect::<Vec<_>>(),

View File

@@ -27,7 +27,7 @@ where
#[inline]
fn i64_to_usize(i: i64, len: usize) -> usize {
if i >= 0 {
i as usize
(i as usize).min(len)
} else {
let v = len as i64 + i;
if v < 0 { 0 } else { v as usize }