Skip to content

Commit 6f48349

Browse files
committed
minor issues
1 parent 58d9203 commit 6f48349

17 files changed

+52
-54
lines changed

src/s3/builders/copy_object.rs

+6-5
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
// limitations under the License.
1515

1616
use crate::s3::Client;
17-
use crate::s3::client::MAX_PART_SIZE;
17+
use crate::s3::client::{MAX_MULTIPART_COUNT, MAX_PART_SIZE};
1818
use crate::s3::error::Error;
1919
use crate::s3::multimap::{Multimap, MultimapExt};
2020
use crate::s3::response::{
@@ -96,10 +96,11 @@ impl ToS3Request for UploadPartCopy {
9696
if self.upload_id.is_empty() {
9797
return Err(Error::InvalidUploadId("upload ID cannot be empty".into()));
9898
}
99-
if !(1..=10000).contains(&self.part_number) {
100-
return Err(Error::InvalidPartNumber(
101-
"part number must be between 1 and 10000".into(),
102-
));
99+
if !(1..=MAX_MULTIPART_COUNT).contains(&self.part_number) {
100+
return Err(Error::InvalidPartNumber(format!(
101+
"part number must be between 1 and {}",
102+
MAX_MULTIPART_COUNT
103+
)));
103104
}
104105
}
105106

src/s3/builders/put_object.rs

+5-4
Original file line numberDiff line numberDiff line change
@@ -415,10 +415,11 @@ impl ToS3Request for UploadPart {
415415
}
416416
}
417417
if let Some(part_number) = self.part_number {
418-
if !(1..=10000).contains(&part_number) {
419-
return Err(Error::InvalidPartNumber(
420-
"part number must be between 1 and 10000".into(),
421-
));
418+
if !(1..=MAX_MULTIPART_COUNT).contains(&part_number) {
419+
return Err(Error::InvalidPartNumber(format!(
420+
"part number must be between 1 and {}",
421+
MAX_MULTIPART_COUNT
422+
)));
422423
}
423424
}
424425
}

src/s3/builders/remove_objects.rs

+2-1
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ use std::pin::Pin;
2323

2424
use tokio_stream::iter as stream_iter;
2525

26+
use crate::s3::client::MAX_MULTIPART_COUNT;
2627
use crate::s3::multimap::{Multimap, MultimapExt};
2728
use crate::s3::response::DeleteError;
2829
use crate::s3::types::ListEntry;
@@ -358,7 +359,7 @@ impl RemoveObjects {
358359
let mut objects = Vec::new();
359360
while let Some(object) = self.objects.items.next().await {
360361
objects.push(object);
361-
if objects.len() >= 1000 {
362+
if objects.len() >= MAX_MULTIPART_COUNT as usize {
362363
break;
363364
}
364365
}

src/s3/client/stat_object.rs

+5-1
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,11 @@ impl Client {
4141
/// println!("stat of object '{}' are {:#?}", resp.object, resp);
4242
/// }
4343
/// ```
44-
pub fn stat_object<S: Into<String>>(&self, bucket: S, object: S) -> StatObject {
44+
pub fn stat_object<S1: Into<String>, S2: Into<String>>(
45+
&self,
46+
bucket: S1,
47+
object: S2,
48+
) -> StatObject {
4549
StatObject::new(self.clone(), bucket.into(), object.into())
4650
}
4751
}

src/s3/error.rs

-14
Original file line numberDiff line numberDiff line change
@@ -178,13 +178,6 @@ pub enum Error {
178178
NoClientProvided,
179179
TagDecodingError(String, String),
180180
ContentLengthUnknown,
181-
182-
//TODO are the following still needed?
183-
NoSuchTagSet,
184-
ReplicationConfigurationNotFoundError,
185-
NoSuchObjectLockConfiguration,
186-
NoSuchBucketPolicy,
187-
NoSuchBucket,
188181
}
189182

190183
impl std::error::Error for Error {}
@@ -354,13 +347,6 @@ impl fmt::Display for Error {
354347
error_message, input
355348
),
356349
Error::ContentLengthUnknown => write!(f, "content length is unknown"),
357-
Error::NoSuchTagSet => write!(f, "no such tag set"),
358-
Error::ReplicationConfigurationNotFoundError => {
359-
write!(f, "Replication configuration not found")
360-
}
361-
Error::NoSuchObjectLockConfiguration => write!(f, "no such object lock"),
362-
Error::NoSuchBucketPolicy => write!(f, "no such bucket policy"),
363-
Error::NoSuchBucket => write!(f, "no such bucket"),
364350
}
365351
}
366352
}

src/s3/multimap.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,8 @@ pub trait MultimapExt {
3131
fn add_multimap(&mut self, other: Multimap);
3232

3333
fn add_version(&mut self, version: Option<String>);
34-
#[must_use]
3534

35+
#[must_use]
3636
fn take_version(self) -> Option<String>;
3737

3838
/// Converts multimap to HTTP query string

src/s3/response/append_object.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ impl FromS3Response for AppendObjectResponse {
4141
resp: Result<reqwest::Response, Error>,
4242
) -> Result<Self, Error> {
4343
let mut resp = resp?;
44-
let headers = mem::take(resp.headers_mut());
44+
let headers: HeaderMap = mem::take(resp.headers_mut());
4545

4646
let etag: String = match headers.get("etag") {
4747
Some(v) => v.to_str()?.to_string().trim_matches('"').to_string(),

src/s3/response/get_bucket_versioning.rs

+2-1
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,8 @@ impl FromS3Response for GetBucketVersioningResponse {
5353
"Enabled" => VersioningStatus::Enabled,
5454
_ => VersioningStatus::Suspended, // Default case
5555
});
56-
let mfa_delete: Option<bool> = get_option_text(&root, "MFADelete").map(|v| v == "Enabled");
56+
let mfa_delete: Option<bool> =
57+
get_option_text(&root, "MFADelete").map(|v| v.eq_ignore_ascii_case("Enabled"));
5758

5859
Ok(Self {
5960
headers,

src/s3/response/get_object.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ impl FromS3Response for GetObjectResponse {
4444
) -> Result<Self, Error> {
4545
let mut resp = resp?;
4646

47-
let headers = mem::take(resp.headers_mut());
47+
let headers: HeaderMap = mem::take(resp.headers_mut());
4848

4949
let etag: Option<String> = headers
5050
.get("etag")

src/s3/response/get_object_lock_config.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ impl FromS3Response for GetObjectLockConfigResponse {
4242
) -> Result<Self, Error> {
4343
let mut resp = resp?;
4444

45-
let headers = mem::take(resp.headers_mut());
45+
let headers: HeaderMap = mem::take(resp.headers_mut());
4646
let body = resp.bytes().await?;
4747
let root = Element::parse(body.reader())?;
4848

src/s3/response/list_objects.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -208,7 +208,7 @@ impl FromS3Response for ListObjectsV1Response {
208208
resp: Result<reqwest::Response, Error>,
209209
) -> Result<Self, Error> {
210210
let mut resp = resp?;
211-
let headers = mem::take(resp.headers_mut());
211+
let headers: HeaderMap = mem::take(resp.headers_mut());
212212
let body = resp.bytes().await?;
213213
let xmltree_root = xmltree::Element::parse(body.reader())?;
214214
let root = Element::from(&xmltree_root);

src/s3/response/object_prompt.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ impl FromS3Response for ObjectPromptResponse {
3737
) -> Result<Self, Error> {
3838
let mut resp = resp?;
3939

40-
let headers = mem::take(resp.headers_mut());
40+
let headers: HeaderMap = mem::take(resp.headers_mut());
4141
let body = resp.bytes().await?;
4242
let prompt_response: String = String::from_utf8(body.to_vec())?;
4343

src/s3/response/put_object.rs

+3-9
Original file line numberDiff line numberDiff line change
@@ -85,12 +85,6 @@ impl FromS3Response for CreateMultipartUploadResponse {
8585
req: S3Request,
8686
resp: Result<reqwest::Response, Error>,
8787
) -> Result<Self, Error> {
88-
let bucket = req
89-
.bucket
90-
.ok_or_else(|| Error::InvalidBucketName("no bucket specified".into()))?;
91-
let object = req
92-
.object
93-
.ok_or_else(|| Error::InvalidObjectName("no object specified".into()))?;
9488
let mut resp = resp?;
9589

9690
let headers: HeaderMap = mem::take(resp.headers_mut());
@@ -99,11 +93,11 @@ impl FromS3Response for CreateMultipartUploadResponse {
9993
let upload_id: String =
10094
get_text(&root, "UploadId").map_err(|e| Error::InvalidUploadId(e.to_string()))?;
10195

102-
Ok(CreateMultipartUploadResponse {
96+
Ok(Self {
10397
headers,
10498
region: req.inner_region,
105-
bucket,
106-
object,
99+
bucket: take_bucket(req.bucket)?,
100+
object: take_object(req.object)?,
107101
upload_id,
108102
})
109103
}

src/s3/utils.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -493,7 +493,7 @@ pub mod xml {
493493

494494
impl Element<'_> {
495495
pub fn name(&self) -> &str {
496-
self.inner.name.as_str()
496+
&self.inner.name
497497
}
498498

499499
pub fn get_child_text(&self, tag: &str) -> Option<String> {

tests/test_append_object.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -351,7 +351,7 @@ async fn append_object_content_3() {
351351
assert_eq!(resp.size, sizes[idx] + initial_size);
352352
assert_eq!(resp.etag, etag);
353353
client
354-
.remove_object(&test_bucket, object_name.as_str())
354+
.remove_object(&test_bucket, &object_name)
355355
.send()
356356
.await
357357
.unwrap();

tests/test_object_put.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -192,7 +192,7 @@ async fn put_object_content_2() {
192192
assert_eq!(resp.size, sizes[idx]);
193193
assert_eq!(resp.etag, etag);
194194
client
195-
.remove_object(&test_bucket, object_name.as_str())
195+
.remove_object(&test_bucket, &object_name)
196196
.send()
197197
.await
198198
.unwrap();

tests/test_put_object.rs

+20-10
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,8 @@ async fn put_object() {
3030
let object_name = rand_object_name();
3131

3232
let size = 16_u64;
33-
ctx.client
33+
let resp: PutObjectContentResponse = ctx
34+
.client
3435
.put_object_content(
3536
&bucket_name,
3637
&object_name,
@@ -39,26 +40,35 @@ async fn put_object() {
3940
.send()
4041
.await
4142
.unwrap();
42-
let resp = ctx
43+
assert_eq!(resp.bucket, bucket_name);
44+
assert_eq!(resp.object, object_name);
45+
assert_eq!(resp.object_size, size);
46+
47+
let resp: StatObjectResponse = ctx
4348
.client
4449
.stat_object(&bucket_name, &object_name)
4550
.send()
4651
.await
4752
.unwrap();
4853
assert_eq!(resp.bucket, bucket_name);
4954
assert_eq!(resp.object, object_name);
50-
assert_eq!(resp.size as u64, size);
51-
ctx.client
52-
.remove_object(&bucket_name, object_name.as_str())
55+
assert_eq!(resp.size, size);
56+
57+
let resp: RemoveObjectResponse = ctx
58+
.client
59+
.remove_object(&bucket_name, &object_name)
5360
.send()
5461
.await
5562
.unwrap();
63+
assert!(resp.version_id.is_some());
64+
5665
// Validate delete succeeded.
57-
let resp = ctx
66+
let resp: Result<StatObjectResponse, Error> = ctx
5867
.client
5968
.stat_object(&bucket_name, &object_name)
6069
.send()
6170
.await;
71+
6272
match resp.err().unwrap() {
6373
Error::S3Error(er) => {
6474
assert_eq!(er.code, ErrorCode::NoSuchKey)
@@ -94,7 +104,7 @@ async fn put_object_multipart() {
94104
assert_eq!(resp.object, object_name);
95105
assert_eq!(resp.size as u64, size);
96106
ctx.client
97-
.remove_object(&bucket_name, object_name.as_str())
107+
.remove_object(&bucket_name, &object_name)
98108
.send()
99109
.await
100110
.unwrap();
@@ -135,7 +145,7 @@ async fn put_object_content_1() {
135145
);
136146
let resp: RemoveObjectResponse = ctx
137147
.client
138-
.remove_object(&bucket_name, object_name.as_str())
148+
.remove_object(&bucket_name, &object_name)
139149
.send()
140150
.await
141151
.unwrap();
@@ -175,7 +185,7 @@ async fn put_object_content_2() {
175185
assert_eq!(resp.size, *size);
176186
assert_eq!(resp.etag, etag);
177187
ctx.client
178-
.remove_object(&bucket_name, object_name.as_str())
188+
.remove_object(&bucket_name, &object_name)
179189
.send()
180190
.await
181191
.unwrap();
@@ -229,7 +239,7 @@ async fn put_object_content_3() {
229239
assert_eq!(resp.size, sizes[idx]);
230240
assert_eq!(resp.etag, etag);
231241
client
232-
.remove_object(&test_bucket, object_name.as_str())
242+
.remove_object(&test_bucket, &object_name)
233243
.send()
234244
.await
235245
.unwrap();

0 commit comments

Comments
 (0)