pub const MAX_OBJECT_SIZE_BYTES: u64 = 5_497_558_138_880;
pub const MAX_PART_SIZE_BYTES: u64 = 5_368_709_120;
pub const MAX_PARTS_PER_UPLOAD: usize = 10_000;
pub const MIN_PART_SIZE_BYTES: u64 = 5_242_880;
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_limits_are_sane() {
const _: () = assert!(MAX_OBJECT_SIZE_BYTES > MAX_PART_SIZE_BYTES);
const _: () = assert!(MAX_PART_SIZE_BYTES > MIN_PART_SIZE_BYTES);
let max_uploadable = MAX_PART_SIZE_BYTES * MAX_PARTS_PER_UPLOAD as u64;
assert!(
max_uploadable >= MAX_OBJECT_SIZE_BYTES,
"Should be able to upload max object size: {MAX_OBJECT_SIZE_BYTES} bytes \
with {MAX_PARTS_PER_UPLOAD} parts of {MAX_PART_SIZE_BYTES} bytes each \
(total capacity: {max_uploadable} bytes)"
);
}
#[test]
fn test_part_number_type_sufficient() {
assert!(
u16::try_from(MAX_PARTS_PER_UPLOAD).is_ok(),
"u16 must be able to represent MAX_PARTS_PER_UPLOAD ({MAX_PARTS_PER_UPLOAD})"
);
}
#[test]
fn test_documented_values_match_constants() {
assert_eq!(MAX_OBJECT_SIZE_BYTES, 5_497_558_138_880, "5 TB");
assert_eq!(MAX_PART_SIZE_BYTES, 5_368_709_120, "5 GB");
assert_eq!(MIN_PART_SIZE_BYTES, 5_242_880, "5 MB");
assert_eq!(MAX_PARTS_PER_UPLOAD, 10_000, "10,000 parts");
}
}