// Generated from test.proto

namespace proto.test.test_namespace_suffix;

/// Enum doc comment.
enum ProtoEnum : int {
  NUL = 0,
  FOO = 1,
  /// Enum 2nd value doc comment misaligned.
  BAR = 5,
}

namespace proto.test.test_namespace_suffix.ProtoMessage_.OtherMessage_;

enum ProtoEnum : int {
  NUL = 0,
  FOO = 1,
  BAR = 2,
  BAZ = 3,
}

namespace proto.test.test_namespace_suffix;

table ImportedMessage {
  a:int;
}

/// 2nd table doc comment with
/// many lines.
table ProtoMessage {
  c:int = 16;
  d:long;
  p:uint;
  e:ulong;
  /// doc comment for f.
  f:int = -1;
  g:long;
  h:uint;
  q:ulong;
  i:int;
  j:long;
  /// doc comment for k.
  k:bool;
  /// doc comment for l on 2
  /// lines
  l:string (required);
  m:[ubyte];
  n:proto.test.test_namespace_suffix.ProtoMessage_.OtherMessage;
  o:[string];
  z:proto.test.test_namespace_suffix.ImportedMessage;
  /// doc comment for r.
  r:proto.test.test_namespace_suffix.ProtoMessage_.Anonymous0;
  outer_enum:proto.test.test_namespace_suffix.ProtoEnum;
  u:float = +inf;
  v:float = +inf;
  w:float = -inf;
  grades:[proto.test.test_namespace_suffix.ProtoMessage_.GradesEntry];
  other_message_map:[proto.test.test_namespace_suffix.ProtoMessage_.OtherMessageMapEntry];
}

namespace proto.test.test_namespace_suffix.ProtoMessage_;

table OtherMessage {
  a:double;
  /// doc comment for b.
  b:float = 3.14149;
  foo_bar_baz:proto.test.test_namespace_suffix.ProtoMessage_.OtherMessage_.ProtoEnum;
}

table Anonymous0 {
  /// doc comment for s.
  s:proto.test.test_namespace_suffix.ImportedMessage;
  /// doc comment for t on 2
  /// lines.
  t:proto.test.test_namespace_suffix.ProtoMessage_.OtherMessage;
}

table GradesEntry {
  key:string (key);
  value:float;
}

table OtherMessageMapEntry {
  key:string (key);
  value:proto.test.test_namespace_suffix.ProtoMessage_.OtherMessage;
}

