///|
fn BidiProtocol::normalize_synthetic_network_set_cookie_entries(
  self : BidiProtocol,
  request_id : Int,
  raw_cookies : Json?,
  base_url : String,
) -> SyntheticNetworkSetCookieEntries? {
  let items = match raw_cookies {
    Some(Array(items)) => items
    _ => {
      self.send_error(
        request_id, "invalid argument", "cookies must be an array",
      )
      return None
    }
  }
  let headers : Array[Json] = []
  let cookies : Array[StoredCookie] = []
  for item in items {
    let map = match item {
      Object(map) => map
      _ => {
        self.send_error(
          request_id, "invalid argument", "cookie entry must be an object",
        )
        return None
      }
    }
    let name = match map.get("name") {
      Some(String(name)) => name
      _ => {
        self.send_error(
          request_id, "invalid argument", "cookie name must be a string",
        )
        return None
      }
    }
    let value = match map.get("value") {
      Some(raw_value) =>
        match
          self.synthetic_network_string_from_bytes_value(
            request_id, raw_value, "cookie.value",
          ) {
          Some(value) => value
          None => return None
        }
      None => {
        self.send_error(
          request_id, "invalid argument", "cookie value must be an object",
        )
        return None
      }
    }
    let normalized = match
      @crater_network.synthetic_network_normalize_set_cookie_override_entry(
        map,
        name,
        value,
        base_url,
        storage_now_seconds(),
      ) {
      Ok(normalized) => normalized
      Err(message) => {
        self.send_error(request_id, "invalid argument", message)
        return None
      }
    }
    cookies.push(synthetic_network_cookie_to_stored_cookie(normalized.cookie))
    headers.push(
      synthetic_network_header_string_entry(
        "Set-Cookie",
        normalized.set_cookie_header_value,
      ),
    )
  }
  Some({ headers, cookies })
}