Skip to content

Commit faeef94

Browse files
authored
Merge pull request #141 from hotdata-dev/worktree-cached-prancing-bengio
refactor: migrate raw HTTP to typed SDK handles
2 parents 9cd8bc6 + da03521 commit faeef94

4 files changed

Lines changed: 145 additions & 114 deletions

File tree

Cargo.lock

Lines changed: 0 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,6 @@ sysinfo = { version = "0.38.4", default-features = false, features = ["system"]
5454
self_update = { version = "0.42", default-features = false, features = ["rustls"] }
5555
lzma-rs = "0.3"
5656
tempfile = "3"
57-
urlencoding = "2.1.3"
5857

5958
[dev-dependencies]
6059
mockito = "1"

src/connections.rs

Lines changed: 25 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -210,10 +210,8 @@ pub fn resolve_connection_id(api: &Api, name_or_id: &str) -> String {
210210
// matches — prefer it over any stale connection entry with the same name.
211211
if let Some(ws) = api.workspace_id()
212212
&& let Some(active_id) = crate::config::load_current_database("default", ws)
213-
&& let Some(active_db) = none_if_404(
214-
api.get_json::<crate::databases::Database>(&format!("/databases/{active_id}"), &[]),
215-
)
216-
.unwrap_or_else(|e| e.exit())
213+
&& let Some(active_db) = none_if_404(crate::databases::get_database(api, &active_id))
214+
.unwrap_or_else(|e| e.exit())
217215
&& (active_db.default_catalog.as_deref() == Some(name_or_id)
218216
|| active_db.name.as_deref() == Some(name_or_id))
219217
{
@@ -301,7 +299,6 @@ pub fn get(workspace_id: &str, connection_id: &str, format: &str) {
301299
}
302300
}
303301

304-
#[derive(Deserialize, Serialize)]
305302
struct CreateResponse {
306303
id: String,
307304
name: String,
@@ -312,47 +309,42 @@ struct CreateResponse {
312309
}
313310

314311
pub fn create(workspace_id: &str, name: &str, source_type: &str, config: &str, format: &str) {
315-
let config_value: serde_json::Value = match serde_json::from_str(config) {
316-
Ok(v) => v,
317-
Err(e) => {
318-
eprintln!("error: --config must be a valid JSON object: {e}");
319-
std::process::exit(1);
320-
}
321-
};
322-
323-
let body = serde_json::json!({
324-
"name": name,
325-
"source_type": source_type,
326-
"config": config_value,
327-
});
312+
let config_map: std::collections::HashMap<String, serde_json::Value> =
313+
match serde_json::from_str(config) {
314+
Ok(v) => v,
315+
Err(e) => {
316+
eprintln!("error: --config must be a valid JSON object: {e}");
317+
std::process::exit(1);
318+
}
319+
};
328320

329321
let api = Api::new(Some(workspace_id));
330322
let is_table = format == "table";
331323

324+
let request = hotdata::models::CreateConnectionRequest::new(
325+
config_map,
326+
name.to_string(),
327+
source_type.to_string(),
328+
);
329+
332330
let spinner = is_table.then(|| crate::util::spinner("Creating connection..."));
333-
let (status, resp_body) = api.post_raw("/connections", &body).unwrap_or_else(|e| {
331+
let resp = block(api.client().connections().create(request)).unwrap_or_else(|e| {
334332
if let Some(s) = &spinner {
335333
s.finish_and_clear();
336334
}
337-
eprintln!("{}", error_text(e));
338-
std::process::exit(1);
335+
e.exit()
339336
});
340337
if let Some(s) = &spinner {
341338
s.finish_and_clear();
342339
}
343340

344-
if !status.is_success() {
345-
use crossterm::style::Stylize;
346-
eprintln!("{}", crate::util::api_error(resp_body).red());
347-
std::process::exit(1);
348-
}
349-
350-
let result: CreateResponse = match serde_json::from_str(&resp_body) {
351-
Ok(v) => v,
352-
Err(e) => {
353-
eprintln!("error parsing response: {e}");
354-
std::process::exit(1);
355-
}
341+
let result = CreateResponse {
342+
id: resp.id,
343+
name: resp.name,
344+
source_type: resp.source_type,
345+
tables_discovered: resp.tables_discovered.max(0) as u64,
346+
discovery_status: resp.discovery_status.to_string(),
347+
discovery_error: resp.discovery_error.flatten(),
356348
};
357349

358350
let health = fetch_health(&api, &result.id, is_table);

0 commit comments

Comments
 (0)