///|
pub impl Encode for StateVector with fn encode(self, encoder) {
  Write::write_var_uint(encoder, self.clocks.length().to_uint64())
  for (client, clock) in self.entries() {
    Write::write_var_uint(encoder, client)
    Write::write_var_uint(encoder, clock.to_uint64())
  }
}

///|
pub impl Decode for StateVector with fn decode(decoder) {
  let count = codec_count(decoder)
  let result = StateVector()
  for _ in 0.. Int32 raise DecodeError {
  let count = Read::read_var_uint(decoder)
  guard count <= decoder.read_to_end().length().to_uint64() else {
    raise InvalidData("length exceeds remaining bytes")
  }
  count.to_int()
}

///|
pub extend StateVector with Encode::{encode}

///|
pub extend StateVector with Decode::{decode}

///|
pub extend IdSet with Encode::{encode}

///|
pub extend IdSet with Decode::{decode}

///|
pub extend Snapshot with Encode::{encode}

///|
pub extend Snapshot with Decode::{decode}