datapress_client/
blocking.rs1use crate::error::Result;
8use crate::models::{Predicate, QueryRequest, QueryResponse, SqlResponse};
9use serde_json::Value as JsonValue;
10
11pub struct Client {
17 inner: crate::Client,
18 rt: tokio::runtime::Runtime,
19}
20
21impl Client {
22 pub fn new(base_url: impl Into<String>) -> Result<Self> {
24 Self::from_async(crate::Client::new(base_url)?)
25 }
26
27 pub fn from_async(inner: crate::Client) -> Result<Self> {
29 let rt = tokio::runtime::Builder::new_current_thread()
30 .enable_all()
31 .build()
32 .map_err(|e| crate::ClientError::Decode(format!("runtime build failed: {e}")))?;
33 Ok(Self { inner, rt })
34 }
35
36 pub fn builder(base_url: impl Into<String>) -> crate::ClientBuilder {
39 crate::ClientBuilder::new(base_url)
40 }
41
42 pub fn healthz(&self) -> Result<JsonValue> {
44 self.rt.block_on(self.inner.healthz())
45 }
46
47 pub fn readyz(&self) -> Result<JsonValue> {
49 self.rt.block_on(self.inner.readyz())
50 }
51
52 pub fn datasets(&self) -> Result<Vec<String>> {
54 self.rt.block_on(self.inner.datasets())
55 }
56
57 pub fn schema(&self, dataset: &str) -> Result<JsonValue> {
59 self.rt.block_on(self.inner.schema(dataset))
60 }
61
62 pub fn count(&self, dataset: &str, predicates: &[Predicate]) -> Result<u64> {
64 self.rt.block_on(self.inner.count(dataset, predicates))
65 }
66
67 pub fn query_json(&self, dataset: &str, request: &QueryRequest) -> Result<QueryResponse> {
69 self.rt.block_on(self.inner.query_json(dataset, request))
70 }
71
72 pub fn sql(&self, sql: impl Into<String>, max_rows: Option<u64>) -> Result<SqlResponse> {
74 self.rt.block_on(self.inner.sql(sql, max_rows))
75 }
76
77 pub fn reload(&self, dataset: &str) -> Result<JsonValue> {
79 self.rt.block_on(self.inner.reload(dataset))
80 }
81
82 pub fn query_arrow_bytes(
85 &self,
86 dataset: &str,
87 request: &QueryRequest,
88 ) -> Result<bytes::Bytes> {
89 self.rt
90 .block_on(self.inner.query_arrow_bytes(dataset, request))
91 }
92
93 #[cfg(feature = "arrow")]
96 pub fn query_arrow(
97 &self,
98 dataset: &str,
99 request: &QueryRequest,
100 ) -> Result<Vec<arrow::record_batch::RecordBatch>> {
101 self.rt.block_on(self.inner.query_arrow(dataset, request))
102 }
103
104 pub fn inner(&self) -> &crate::Client {
106 &self.inner
107 }
108}