@@ -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 ) ]
305302struct CreateResponse {
306303 id : String ,
307304 name : String ,
@@ -312,47 +309,42 @@ struct CreateResponse {
312309}
313310
314311pub 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