@@ -336,26 +336,29 @@ impl Catalog for RestCatalog {
336336 identifier : Identifier ,
337337 create_table : CreateTable ,
338338 ) -> Result < Table , Error > {
339- catalog_api_api:: create_table (
339+ let response = catalog_api_api:: create_table (
340340 & self . configuration ,
341341 self . name . as_deref ( ) ,
342342 & identifier. namespace ( ) . to_string ( ) ,
343343 create_table,
344344 None ,
345345 )
346346 . map_err ( Into :: < Error > :: into)
347- . and_then ( |response| {
348- let clone = self . clone ( ) ;
349- async move {
350- let object_store = clone
351- . default_object_store_builder
347+ . await ?;
348+
349+ let object_store = object_store_from_response ( & response) ?
350+ . ok_or ( Error :: NotFound ( "Object store credentials" . to_string ( ) ) )
351+ . or_else ( |_| {
352+ self . default_object_store_builder
352353 . as_ref ( )
353- . ok_or ( Error :: NotFound ( "Default object store" . to_string ( ) ) ) ?
354- . build ( Bucket :: from_path ( & response. metadata . location ) ?) ?;
355- Table :: new ( identifier. clone ( ) , clone, object_store, response. metadata ) . await
356- }
357- } )
358- . await
354+ . ok_or ( Error :: NotFound ( "Default object store" . to_string ( ) ) )
355+ . and_then ( |x| {
356+ let bucket = Bucket :: from_path ( & response. metadata . location ) ?;
357+ x. build ( bucket)
358+ } )
359+ } ) ?;
360+
361+ Table :: new ( identifier. clone ( ) , self , object_store, response. metadata ) . await
359362 }
360363 /// Update a table by atomically changing the pointer to the metadata file
361364 async fn update_table (
@@ -511,25 +514,27 @@ impl Catalog for RestCatalog {
511514 metadata_location. to_owned ( ) ,
512515 ) ;
513516
514- catalog_api_api:: register_table (
517+ let response = catalog_api_api:: register_table (
515518 & self . configuration ,
516519 self . name . as_deref ( ) ,
517520 & identifier. namespace ( ) . to_string ( ) ,
518521 request,
519522 )
520523 . map_err ( Into :: < Error > :: into)
521- . and_then ( |response| {
522- let clone = self . clone ( ) ;
523- async move {
524- let object_store = clone
525- . default_object_store_builder
524+ . await ? ;
525+ let object_store = object_store_from_response ( & response ) ?
526+ . ok_or ( Error :: NotFound ( "Object store credentials" . to_string ( ) ) )
527+ . or_else ( |_| {
528+ self . default_object_store_builder
526529 . as_ref ( )
527- . ok_or ( Error :: NotFound ( "Default object store" . to_string ( ) ) ) ?
528- . build ( Bucket :: from_path ( & response. metadata . location ) ?) ?;
529- Table :: new ( identifier. clone ( ) , clone, object_store, response. metadata ) . await
530- }
531- } )
532- . await
530+ . ok_or ( Error :: NotFound ( "Default object store" . to_string ( ) ) )
531+ . and_then ( |x| {
532+ let bucket = Bucket :: from_path ( & response. metadata . location ) ?;
533+ x. build ( bucket)
534+ } )
535+ } ) ?;
536+
537+ Table :: new ( identifier. clone ( ) , self , object_store, response. metadata ) . await
533538 }
534539}
535540
0 commit comments