feat: add comprehensive formatting rules and type inference guidelines

This commit is contained in:
overtrue
2025-05-28 16:04:38 +08:00
parent f05a0b8e83
commit 8747a91df8
28 changed files with 792 additions and 383 deletions
+1 -5
View File
@@ -117,11 +117,7 @@ impl Operation for PutFile {
.map_err(|e| s3_error!(InternalError, "read file err {}", e))?
};
let mut body = StreamReader::new(
req.input
.into_stream()
.map_err(std::io::Error::other),
);
let mut body = StreamReader::new(req.input.into_stream().map_err(std::io::Error::other));
tokio::io::copy(&mut body, &mut file)
.await
+2 -6
View File
@@ -960,9 +960,7 @@ impl S3 for FS {
}
};
let body = Box::new(StreamReader::new(
body.map(|f| f.map_err(|e| std::io::Error::other(e.to_string()))),
));
let body = Box::new(StreamReader::new(body.map(|f| f.map_err(|e| std::io::Error::other(e.to_string())))));
let mut reader = PutObjReader::new(body, content_length as usize);
@@ -1076,9 +1074,7 @@ impl S3 for FS {
}
};
let body = Box::new(StreamReader::new(
body.map(|f| f.map_err(|e| std::io::Error::other(e.to_string()))),
));
let body = Box::new(StreamReader::new(body.map(|f| f.map_err(|e| std::io::Error::other(e.to_string())))));
// mc cp step 4
let mut data = PutObjReader::new(body, content_length as usize);
+31 -56
View File
@@ -104,11 +104,8 @@ mod tests {
#[test]
fn test_to_s3_error_invalid_argument() {
let storage_err = StorageError::InvalidArgument(
"test-bucket".to_string(),
"test-object".to_string(),
"test-version".to_string(),
);
let storage_err =
StorageError::InvalidArgument("test-bucket".to_string(), "test-object".to_string(), "test-version".to_string());
let err = Error::new(storage_err);
let s3_err = to_s3_error(err);
@@ -163,10 +160,7 @@ mod tests {
#[test]
fn test_to_s3_error_object_name_invalid() {
let storage_err = StorageError::ObjectNameInvalid(
"test-bucket".to_string(),
"invalid-object".to_string(),
);
let storage_err = StorageError::ObjectNameInvalid("test-bucket".to_string(), "invalid-object".to_string());
let err = Error::new(storage_err);
let s3_err = to_s3_error(err);
@@ -193,7 +187,10 @@ mod tests {
let s3_err = to_s3_error(err);
assert_eq!(*s3_err.code(), S3ErrorCode::ServiceUnavailable);
assert!(s3_err.message().unwrap().contains("Storage reached its minimum free drive threshold"));
assert!(s3_err
.message()
.unwrap()
.contains("Storage reached its minimum free drive threshold"));
}
#[test]
@@ -208,10 +205,7 @@ mod tests {
#[test]
fn test_to_s3_error_prefix_access_denied() {
let storage_err = StorageError::PrefixAccessDenied(
"test-bucket".to_string(),
"test-prefix".to_string(),
);
let storage_err = StorageError::PrefixAccessDenied("test-bucket".to_string(), "test-prefix".to_string());
let err = Error::new(storage_err);
let s3_err = to_s3_error(err);
@@ -223,10 +217,7 @@ mod tests {
#[test]
fn test_to_s3_error_invalid_upload_id_key_combination() {
let storage_err = StorageError::InvalidUploadIDKeyCombination(
"test-bucket".to_string(),
"test-object".to_string(),
);
let storage_err = StorageError::InvalidUploadIDKeyCombination("test-bucket".to_string(), "test-object".to_string());
let err = Error::new(storage_err);
let s3_err = to_s3_error(err);
@@ -249,10 +240,7 @@ mod tests {
#[test]
fn test_to_s3_error_object_name_too_long() {
let storage_err = StorageError::ObjectNameTooLong(
"test-bucket".to_string(),
"very-long-object-name".to_string(),
);
let storage_err = StorageError::ObjectNameTooLong("test-bucket".to_string(), "very-long-object-name".to_string());
let err = Error::new(storage_err);
let s3_err = to_s3_error(err);
@@ -264,25 +252,22 @@ mod tests {
#[test]
fn test_to_s3_error_object_name_prefix_as_slash() {
let storage_err = StorageError::ObjectNamePrefixAsSlash(
"test-bucket".to_string(),
"/invalid-object".to_string(),
);
let storage_err = StorageError::ObjectNamePrefixAsSlash("test-bucket".to_string(), "/invalid-object".to_string());
let err = Error::new(storage_err);
let s3_err = to_s3_error(err);
assert_eq!(*s3_err.code(), S3ErrorCode::InvalidArgument);
assert!(s3_err.message().unwrap().contains("Object name contains forward slash as prefix"));
assert!(s3_err
.message()
.unwrap()
.contains("Object name contains forward slash as prefix"));
assert!(s3_err.message().unwrap().contains("test-bucket"));
assert!(s3_err.message().unwrap().contains("/invalid-object"));
}
#[test]
fn test_to_s3_error_object_not_found() {
let storage_err = StorageError::ObjectNotFound(
"test-bucket".to_string(),
"missing-object".to_string(),
);
let storage_err = StorageError::ObjectNotFound("test-bucket".to_string(), "missing-object".to_string());
let err = Error::new(storage_err);
let s3_err = to_s3_error(err);
@@ -293,11 +278,8 @@ mod tests {
#[test]
fn test_to_s3_error_version_not_found() {
let storage_err = StorageError::VersionNotFound(
"test-bucket".to_string(),
"test-object".to_string(),
"missing-version".to_string(),
);
let storage_err =
StorageError::VersionNotFound("test-bucket".to_string(), "test-object".to_string(), "missing-version".to_string());
let err = Error::new(storage_err);
let s3_err = to_s3_error(err);
@@ -309,11 +291,8 @@ mod tests {
#[test]
fn test_to_s3_error_invalid_upload_id() {
let storage_err = StorageError::InvalidUploadID(
"test-bucket".to_string(),
"test-object".to_string(),
"invalid-upload-id".to_string(),
);
let storage_err =
StorageError::InvalidUploadID("test-bucket".to_string(), "test-object".to_string(), "invalid-upload-id".to_string());
let err = Error::new(storage_err);
let s3_err = to_s3_error(err);
@@ -361,10 +340,7 @@ mod tests {
#[test]
fn test_to_s3_error_object_exists_as_directory() {
let storage_err = StorageError::ObjectExistsAsDirectory(
"test-bucket".to_string(),
"directory-object".to_string(),
);
let storage_err = StorageError::ObjectExistsAsDirectory("test-bucket".to_string(), "directory-object".to_string());
let err = Error::new(storage_err);
let s3_err = to_s3_error(err);
@@ -382,7 +358,10 @@ mod tests {
let s3_err = to_s3_error(err);
assert_eq!(*s3_err.code(), S3ErrorCode::SlowDown);
assert!(s3_err.message().unwrap().contains("Storage resources are insufficient for the read operation"));
assert!(s3_err
.message()
.unwrap()
.contains("Storage resources are insufficient for the read operation"));
}
#[test]
@@ -392,7 +371,10 @@ mod tests {
let s3_err = to_s3_error(err);
assert_eq!(*s3_err.code(), S3ErrorCode::SlowDown);
assert!(s3_err.message().unwrap().contains("Storage resources are insufficient for the write operation"));
assert!(s3_err
.message()
.unwrap()
.contains("Storage resources are insufficient for the write operation"));
}
#[test]
@@ -428,11 +410,7 @@ mod tests {
#[test]
fn test_to_s3_error_invalid_part() {
let storage_err = StorageError::InvalidPart(
1,
"expected-part".to_string(),
"got-part".to_string(),
);
let storage_err = StorageError::InvalidPart(1, "expected-part".to_string(), "got-part".to_string());
let err = Error::new(storage_err);
let s3_err = to_s3_error(err);
@@ -477,10 +455,7 @@ mod tests {
#[test]
fn test_to_s3_error_with_special_characters() {
let storage_err = StorageError::ObjectNameInvalid(
"bucket-with-@#$%".to_string(),
"object-with-!@#$%^&*()".to_string(),
);
let storage_err = StorageError::ObjectNameInvalid("bucket-with-@#$%".to_string(), "object-with-!@#$%^&*()".to_string());
let err = Error::new(storage_err);
let s3_err = to_s3_error(err);
+1 -1
View File
@@ -630,7 +630,7 @@ mod tests {
"x-amz-storage-class",
"x-amz-tagging",
"expires",
"x-amz-replication-status"
"x-amz-replication-status",
];
assert_eq!(*SUPPORTED_HEADERS, expected_headers);