// Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

syntax = "proto2";

package foo;

message Foo {
}

message Outer {
  optional string value = 1;
  repeated string strings = 2;
  optional int64 id = 3;
  optional Inner inner = 4;
  repeated Inner inners = 5;
  extensions 6 to 7;
}

message OuterWithMap {
  map<int32, Inner> inner_map = 3;
}

message Inner {
  optional string value = 1;
  optional int64 id = 2;
  repeated string strings = 3;
  optional Inner inner = 4;
}

extend Outer {
  optional Inner inner = 6;
  repeated Inner inners = 7;
}
