(range_str: &str, total_size: u64)
| 183 | } |
| 184 | |
| 185 | fn parse_range(range_str: &str, total_size: u64) -> Option<RangeRequest> { |
| 186 | let range_parts: Vec<&str> = range_str.split('-').collect(); |
| 187 | |
| 188 | if range_parts.len() != 2 { |
| 189 | return None; |
| 190 | } |
| 191 | |
| 192 | let start_result = range_parts[0].parse::<u64>(); |
| 193 | let start = start_result.unwrap_or(0); |
| 194 | |
| 195 | // Parse end position - if empty, use total_size-1 (open-ended range) |
| 196 | let end = if range_parts[1].is_empty() { |
| 197 | total_size.saturating_sub(1) // Avoid underflow |
| 198 | } else { |
| 199 | let end_result = range_parts[1].parse::<u64>(); |
| 200 | let parsed_end = end_result.unwrap_or(total_size.saturating_sub(1)); |
| 201 | parsed_end.min(total_size.saturating_sub(1)) |
| 202 | }; |
| 203 | |
| 204 | Some(RangeRequest { |
| 205 | start, |
| 206 | end, |
| 207 | total_size, |
| 208 | }) |
| 209 | } |
| 210 | |
| 211 | fn handle_range_response_correction( |
| 212 | response: &mut HttpResponseBuilder, |
no outgoing calls
no test coverage detected