44 */
55
66use aws_config:: meta:: region:: RegionProviderChain ;
7+ use aws_sdk_s3:: error:: CreateBucketError ;
78use aws_sdk_s3:: model:: { BucketLocationConstraint , CreateBucketConfiguration } ;
9+ use aws_sdk_s3:: output:: CreateBucketOutput ;
10+ use aws_sdk_s3:: types:: SdkError ;
811use aws_sdk_s3:: { Client , Error , Region , PKG_VERSION } ;
912use structopt:: StructOpt ;
1013
@@ -25,7 +28,11 @@ struct Opt {
2528
2629// Creates a bucket.
2730// snippet-start:[s3.rust.create-bucket]
28- async fn make_bucket ( client : & Client , bucket : & str , region : & str ) -> Result < ( ) , Error > {
31+ async fn make_bucket (
32+ client : & Client ,
33+ bucket : & str ,
34+ region : & str ,
35+ ) -> Result < CreateBucketOutput , SdkError < CreateBucketError > > {
2936 let constraint = BucketLocationConstraint :: from ( region) ;
3037 let cfg = CreateBucketConfiguration :: builder ( )
3138 . location_constraint ( constraint)
@@ -36,13 +43,33 @@ async fn make_bucket(client: &Client, bucket: &str, region: &str) -> Result<(),
3643 . create_bucket_configuration ( cfg)
3744 . bucket ( bucket)
3845 . send ( )
39- . await ?;
40- println ! ( "Created bucket." ) ;
41-
42- Ok ( ( ) )
46+ . await
4347}
4448// snippet-end:[s3.rust.create-bucket]
4549
50+ #[ cfg( test) ]
51+ mod test_make_bucket {
52+ use sdk_examples_test_utils:: single_shot_client;
53+
54+ use crate :: make_bucket;
55+
56+ #[ tokio:: test]
57+ async fn test_make_bucket ( ) {
58+ let client = single_shot_client ! {
59+ sdk: aws_sdk_s3,
60+ status: 200 ,
61+ headers: vec![ ( "Location" , "/test_bucket" ) ] ,
62+ response: r#""#
63+ } ;
64+
65+ let res = make_bucket ( & client, "bucket" , "region" ) . await ;
66+
67+ assert ! ( res. is_ok( ) , "{res:?}" ) ;
68+
69+ assert_eq ! ( res. unwrap( ) . location( ) , Some ( "/test_bucket" ) )
70+ }
71+ }
72+
4673/// Creates an Amazon S3 bucket in the Region.
4774/// # Arguments
4875///
@@ -83,5 +110,8 @@ async fn main() -> Result<(), Error> {
83110 let shared_config = aws_config:: from_env ( ) . region ( region_provider) . load ( ) . await ;
84111 let client = Client :: new ( & shared_config) ;
85112
86- make_bucket ( & client, & bucket, r_str) . await
113+ make_bucket ( & client, & bucket, r_str) . await ?;
114+ println ! ( "Created bucket." ) ;
115+
116+ Ok ( ( ) )
87117}
0 commit comments