Return len
This commit is contained in:
1
Cargo.lock
generated
1
Cargo.lock
generated
@@ -2708,6 +2708,7 @@ dependencies = [
|
|||||||
"axum",
|
"axum",
|
||||||
"bytes",
|
"bytes",
|
||||||
"futures-core",
|
"futures-core",
|
||||||
|
"pile-dataset",
|
||||||
"reqwest",
|
"reqwest",
|
||||||
"serde",
|
"serde",
|
||||||
"thiserror",
|
"thiserror",
|
||||||
|
|||||||
@@ -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 }
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
@@ -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();
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user