pub fn parse_range_header(
header: &str,
resource_size: u64,
) -> Result<Vec<ByteRange>, RangeError>Expand description
Parse a Range header value and resolve it against a resource size.
Supports the following formats:
bytes=0-499- First 500 bytesbytes=500-999- Bytes 500-999bytes=500-- From byte 500 to endbytes=-500- Last 500 bytesbytes=0-0, 500-999- Multiple ranges
§Errors
Returns an error if:
- The syntax is invalid
- The unit is not “bytes”
- Too many ranges are specified (limit exceeded)
- The range is not satisfiable for the given resource size
§Examples
use fastapi_http::range::parse_range_header;
// First 500 bytes of a 1000-byte resource
let ranges = parse_range_header("bytes=0-499", 1000).unwrap();
assert_eq!(ranges[0].start, 0);
assert_eq!(ranges[0].end, 499);
assert_eq!(ranges[0].len(), 500);
// Last 100 bytes
let ranges = parse_range_header("bytes=-100", 1000).unwrap();
assert_eq!(ranges[0].start, 900);
assert_eq!(ranges[0].end, 999);
// From byte 500 to end
let ranges = parse_range_header("bytes=500-", 1000).unwrap();
assert_eq!(ranges[0].start, 500);
assert_eq!(ranges[0].end, 999);