
// A series of messages with various kinds of cycles in them.
//      +-+---+    +---+    +---+
//      V |   |    V   |    V   |
// A -> B-+-> C -> D---+--->E---+
// ^          |`---|--------^
// +----------+----+        F

syntax = "proto2";

message A {
  optional B b = 1;
}

message B {
  optional B b = 1;
  optional C c = 2;
}

message C {
  optional A a = 1;
  optional B b = 2;
  optional D d = 3;
  optional E e = 4;
}

message D {
  optional A a = 1;
  optional D d = 2;
  optional E e = 3;
}

message E {
  optional E e = 1;
}

message F {
  optional E e = 1;
}

// A proto with a bunch of simple primitives.
message SimplePrimitives {
  optional fixed64 u64 = 1;
  optional fixed32 u32 = 2;
  optional double dbl = 3;
  optional float flt = 5;
  optional sint64 i64 = 6;
  optional sint32 i32 = 7;
  optional bool b = 8;
  optional string str = 9;

  oneof foo {
    int32 oneof_int32 = 10;
    string oneof_string = 11;
  }

  oneof bar {
    int64 oneof_int64 = 13;
    bytes oneof_bytes = 14;
  }

  message Nested {
    oneof foo {
      int32 oneof_int32 = 10;
      string b = 11;
    }
  }
}
