rust_serv/utils/
helpers.rs1pub fn format_bytes(bytes: u64) -> String {
3 const UNITS: &[&str] = &["B", "KB", "MB", "GB", "TB"];
4 let mut size = bytes as f64;
5 let mut unit_index = 0;
6
7 while size >= 1024.0 && unit_index < UNITS.len() - 1 {
8 size /= 1024.0;
9 unit_index += 1;
10 }
11
12 format!("{:.2} {}", size, UNITS[unit_index])
13}
14
15pub fn generate_etag(content: &[u8]) -> String {
17 use std::collections::hash_map::DefaultHasher;
18 use std::hash::{Hash, Hasher};
19
20 let mut hasher = DefaultHasher::new();
21 content.hash(&mut hasher);
22 format!("\"{:x}\"", hasher.finish())
23}
24
25#[cfg(test)]
26mod tests {
27 use super::*;
28
29 #[test]
30 fn test_format_bytes() {
31 assert_eq!(format_bytes(0), "0.00 B");
32 assert_eq!(format_bytes(1024), "1.00 KB");
33 assert_eq!(format_bytes(1024 * 1024), "1.00 MB");
34 }
35
36 #[test]
37 fn test_generate_etag() {
38 let etag1 = generate_etag(b"hello");
39 let etag2 = generate_etag(b"hello");
40 let etag3 = generate_etag(b"world");
41
42 assert_eq!(etag1, etag2);
43 assert_ne!(etag1, etag3);
44 }
45}