Tweak schema api
All checks were successful
CI / Typos (push) Successful in 32s
CI / Clippy (push) Successful in 1m15s
CI / Build and test (push) Successful in 1m42s
CI / Build and test (all features) (push) Successful in 6m9s
Docker / build-and-push (push) Successful in 3m23s

This commit is contained in:
2026-03-27 03:13:15 -07:00
parent 336480469c
commit 9967e066bb
5 changed files with 215 additions and 48 deletions

View File

@@ -11,7 +11,8 @@ use thiserror::Error;
use tracing::{trace, warn};
pub use pile_dataset::serve::{
FieldSpec, FieldsResponse, ItemsResponse, LookupRequest, LookupResponse,
ApiValue, FieldSpec, FieldsResponse, ItemsResponse, LookupRequest, LookupResponse,
SchemaResponse,
};
#[derive(Debug, Error)]
@@ -169,19 +170,19 @@ impl DatasetClient {
Ok(FieldResponse { content_type, data })
}
/// `GET /field` — get a field from an item's schema
pub async fn get_field(
/// `GET /schema/{field}` — get a single schema field value from an item.
pub async fn schema_field(
&self,
source: &str,
key: &str,
field: &str,
) -> Result<FieldResponse, ClientError> {
let url = format!("{}/field", self.base_url);
trace!(url, source, key, field, "GET /field");
let url = format!("{}/schema/{field}", self.base_url);
trace!(url, source, key, field, "GET /schema/{field}");
let resp = self
.client
.get(url)
.query(&[("source", source), ("key", key), ("field", field)])
.query(&[("source", source), ("key", key)])
.send()
.await?;
@@ -199,10 +200,29 @@ impl DatasetClient {
Ok(FieldResponse { content_type, data })
}
/// `GET /schema` — retrieve this dataset's schema.
pub async fn schema(&self) -> Result<FieldsResponse, ClientError> {
/// `GET /schema` — get all schema field values for a single item.
pub async fn schema(
&self,
source: &str,
key: &str,
hidden: bool,
) -> Result<SchemaResponse, ClientError> {
let url = format!("{}/schema", self.base_url);
trace!(url, "GET /schema");
trace!(url, source, key, hidden, "GET /schema");
let resp = self
.client
.get(url)
.query(&[("source", source), ("key", key)])
.query(&[("hidden", hidden)])
.send()
.await?;
check_status(resp).await?.json().await.map_err(Into::into)
}
/// `GET /config/schema` — retrieve this dataset's schema spec.
pub async fn config_schema(&self) -> Result<FieldsResponse, ClientError> {
let url = format!("{}/config/schema", self.base_url);
trace!(url, "GET /config/schema");
let resp = self.client.get(url).send().await?;
check_status(resp).await?.json().await.map_err(Into::into)
}