// file: message.fbs namespace proto; enum MessageType : byte { NONE = 0, DATA = 1, ACK = 2, HEARTBEAT = 3 } table DataMessage { id: string; topic: string; timestamp: ulong; payload: [ubyte]; metadata: [KeyValue]; } table AckMessage { acked_id: string; timestamp: ulong; } table HeartBeatMessage { client_id: string; timestamp: ulong; } table KeyValue { key: string; value: string; } union Message { DataMessage, AckMessage, HeartBeatMessage, } table Envelope { type: MessageType; message: Message; } root_type Envelope;