///|
/// Parsing of Parameters (RFC 9651 ยง4.2.3.2).
///
/// Each parameter starts with `;`, optionally followed by SP, a key, and
/// an optional `=value`. A parameter with no explicit value is Boolean
/// true. Duplicate keys collapse to their last occurrence.
pub fn parse_parameters_cursor(
  cursor : Cursor,
  limits : ParseLimits,
) -> Result[Parameters, SfError] {
  let params = Parameters::new()
  while !cursor.is_end() {
    if cursor.peek() != Some(b';') {
      break
    }
    let _ = cursor.consume() // ';'
    cursor.skip_spaces()
    let key = match parse_key(cursor) {
      Err(e) => return Err(e)
      Ok(k) => k
    }
    let mut value = Boolean(true)
    if cursor.peek() == Some(b'=') {
      let _ = cursor.consume()
      value = match parse_bare_item_cursor(cursor, limits) {
        Err(e) => return Err(e)
        Ok(v) => v
      }
    }
    params.set(key, value)
    if params.len() > limits.max_parameters {
      return Err(err_at(cursor, TooManyParameters))
    }
  }
  Ok(params)
}