Proto message

use "buffered"

trait ProtoMessage
  fun is_initialized(): Bool => true
  fun compute_size(): U32 => 0
  fun write_to_stream(writer: ProtoWriter) => None
  fun ref parse_from_stream(reader: ProtoReader) ? =>
    reader.skip_raw(reader.size())?

trait val ProtoEnumValue
  fun as_i32(): I32

trait val ProtoEnum
  fun from_i32(value: I32): (ProtoEnumValue | None)