// Example protobuf definition for testing
// See Makefile for how to use it

syntax = "proto2";

enum VectorType {
  DOUBLE    = 2;
  FLOAT     = 3;
  INTEGER   = 4;
  INTEGER64 = 5;
  INTEGER32 = 6;
  UNSIGNED  = 7;
  BYTES     = 8;
  ATOM      = 9;
  STRING    = 10;
}

message Vector {
  repeated double  double_values    = 2;
  repeated float   float_values     = 3;
  repeated sint32  integer_values   = 4;
  repeated fixed64 integer64_values = 5;
  repeated fixed32 integer32_values = 6;
  repeated uint32  unsigned_values  = 7;
  repeated bytes   bytes_values     = 8;
  repeated string  atom_values      = 9;
  repeated string  string_values    = 10;
}
//

message compound_protobuf {
  optional group Complex = 12 {
    required double real = 1;
    required double img = 2;
  };
  optional group Fraction = 15 {
    required sint64 num = 1;
    required sint64 den = 2;
  };
  optional float float = 13;
  optional double double = 14;
  optional sint32 integer = 16;
}

message protobuf_bag {
  repeated compound_protobuf bag = 1;
}


// messages used in section "Example: A Simple XML Like Structure"

message kv_pair {
  required string key = 30;
  optional sint64  int_value = 31;
  optional double float_value  = 32;
  optional string atom_value = 33;
}

message aux_xml_element {
  optional string atom = 43;
  optional xml_element element = 40;
}

message xml_element {
  required string name = 21;
  repeated kv_pair attributes = 22;
  repeated aux_xml_element contents = 23;
}

message XMLFile {
  repeated xml_element elements = 20;
}
