Skip to main content

parse_range_header

Function parse_range_header 

Source
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 bytes
  • bytes=500-999 - Bytes 500-999
  • bytes=500- - From byte 500 to end
  • bytes=-500 - Last 500 bytes
  • bytes=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);