Return len
Some checks failed
CI / Typos (push) Successful in 31s
CI / Clippy (push) Successful in 1m17s
CI / Build and test (all features) (push) Failing after 5m32s
CI / Build and test (push) Failing after 7m49s

This commit is contained in:
2026-03-24 03:43:26 -07:00
parent 6f267880c8
commit f7ea25f059
5 changed files with 11 additions and 44 deletions

1
Cargo.lock generated
View File

@@ -2708,6 +2708,7 @@ dependencies = [
"axum", "axum",
"bytes", "bytes",
"futures-core", "futures-core",
"pile-dataset",
"reqwest", "reqwest",
"serde", "serde",
"thiserror", "thiserror",

View File

@@ -8,6 +8,8 @@ edition = { workspace = true }
workspace = true workspace = true
[dependencies] [dependencies]
pile-dataset = { workspace = true, features = ["axum"] }
reqwest = { version = "0.12", features = ["json", "stream"] } reqwest = { version = "0.12", features = ["json", "stream"] }
futures-core = "0.3" futures-core = "0.3"
serde = { workspace = true } serde = { workspace = true }

View File

@@ -5,14 +5,12 @@ use axum::{
use bytes::Bytes; use bytes::Bytes;
use futures_core::Stream; use futures_core::Stream;
use reqwest::{Client, StatusCode, header}; use reqwest::{Client, StatusCode, header};
use serde::{Deserialize, Serialize}; use serde::Deserialize;
use std::pin::Pin; use std::pin::Pin;
use thiserror::Error; use thiserror::Error;
use tracing::{trace, warn}; use tracing::{trace, warn};
// pub use pile_dataset::serve::{ItemsResponse, LookupRequest, LookupResponse};
// MARK: Error
//
#[derive(Debug, Error)] #[derive(Debug, Error)]
pub enum ClientError { pub enum ClientError {
@@ -26,48 +24,11 @@ pub enum ClientError {
Reqwest(#[from] reqwest::Error), Reqwest(#[from] reqwest::Error),
} }
//
// MARK: Response types
//
#[derive(Debug, Deserialize)] #[derive(Debug, Deserialize)]
pub struct DatasetInfo { pub struct DatasetInfo {
pub name: String, pub name: String,
} }
#[derive(Debug, Serialize)]
pub struct LookupRequest {
pub query: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub limit: Option<usize>,
}
#[derive(Debug, Deserialize)]
pub struct LookupResult {
pub score: f32,
pub source: String,
pub key: String,
}
#[derive(Debug, Deserialize)]
pub struct LookupResponse {
pub results: Vec<LookupResult>,
}
#[derive(Debug, Deserialize)]
pub struct ItemRef {
pub source: String,
pub key: String,
}
#[derive(Debug, Deserialize)]
pub struct ItemsResponse {
pub items: Vec<ItemRef>,
pub total: usize,
pub offset: usize,
pub limit: usize,
}
/// Raw field response: the content-type and body bytes as returned by the server. /// Raw field response: the content-type and body bytes as returned by the server.
pub struct FieldResponse { pub struct FieldResponse {
pub content_type: String, pub content_type: String,

View File

@@ -23,7 +23,7 @@ fn default_limit() -> usize {
100 100
} }
#[derive(Serialize, ToSchema)] #[derive(Debug, Serialize, Deserialize, ToSchema)]
pub struct ItemsResponse { pub struct ItemsResponse {
pub items: Vec<ItemRef>, pub items: Vec<ItemRef>,
pub total: usize, pub total: usize,
@@ -31,7 +31,7 @@ pub struct ItemsResponse {
pub limit: usize, pub limit: usize,
} }
#[derive(Serialize, ToSchema)] #[derive(Debug, Serialize, Deserialize, ToSchema)]
pub struct ItemRef { pub struct ItemRef {
pub source: String, pub source: String,
pub key: String, pub key: String,

View File

@@ -22,6 +22,7 @@ pub struct LookupRequest {
#[derive(Debug, Serialize, Deserialize, ToSchema)] #[derive(Debug, Serialize, Deserialize, ToSchema)]
pub struct LookupResponse { pub struct LookupResponse {
pub results: Vec<LookupResult>, pub results: Vec<LookupResult>,
pub total: u64,
} }
#[derive(Debug, Serialize, Deserialize, ToSchema)] #[derive(Debug, Serialize, Deserialize, ToSchema)]
@@ -66,6 +67,8 @@ pub async fn lookup(
} }
}; };
let total: u64 = state.sources.iter().map(|x| x.1.len() as u64).sum();
debug!( debug!(
message = "Served /lookup", message = "Served /lookup",
query = body.query, query = body.query,
@@ -73,5 +76,5 @@ pub async fn lookup(
time_ms = start.elapsed().as_millis() time_ms = start.elapsed().as_millis()
); );
return (StatusCode::OK, Json(LookupResponse { results })).into_response(); return (StatusCode::OK, Json(LookupResponse { results, total })).into_response();
} }