///|
/// The chunks of one member request received so far. The first valid chunk
/// fixes the chunk count; a chunk that disagrees with it is ignored.
priv struct MemberChunks {
  received : Map[Int32, @model.GuildMembersChunkEvent]
  mut count : Int32?
}

///|
fn MemberChunks::new() -> MemberChunks {
  { received: Map([]), count: None, }
}

///|
/// Record a chunk and return the assembled members once every index in
/// `0.. FetchedMembers? {
  if chunk.chunk_count <= 0 ||
    chunk.chunk_index < 0 ||
    chunk.chunk_index >= chunk.chunk_count {
    return None
  }
  if self.count is None {
    self.count = Some(chunk.chunk_count)
  }
  if self.count != Some(chunk.chunk_count) {
    return None
  }
  self.received[chunk.chunk_index] = chunk
  guard self.received.length() == chunk.chunk_count else { return None }
  let members = []
  let presences = []
  let not_found = []
  for index in 0..