/*
  Licensed to the Apache Software Foundation (ASF) under one or more
  contributor license agreements.  See the NOTICE file distributed with
  this work for additional information regarding copyright ownership.
  The ASF licenses this file to You under the Apache License, Version 2.0
  (the "License"); you may not use this file except in compliance with
  the License.  You may obtain a copy of the License at
  
      http://www.apache.org/licenses/LICENSE-2.0
  
  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
 */

syntax = "proto3";
import "google/protobuf/any.proto";
package org.apache.servicecomb.foundation.protobuf.internal.model;

message Root {
  int32 int32 = 1;
  int64 int64 = 2;
  uint32 uint32 = 3;
  uint64 uint64 = 4;
  sint32 sint32 = 5;
  sint64 sint64 = 6;
  fixed32 fixed32 = 7;
  fixed64 fixed64 = 8;
  sfixed32 sfixed32 = 9;
  sfixed64 sfixed64 = 10;
  float floatValue = 11;
  double doubleValue = 12;
  bool bool = 13;

  int32 objInt32 = 20;
  int64 objInt64 = 21;
  uint32 objUint32 = 22;
  uint64 objUint64 = 23;
  sint32 objSint32 = 24;
  sint64 objSint64 = 25;
  fixed32 objFixed32 = 26;
  fixed64 objFixed64 = 27;
  sfixed32 objSfixed32 = 28;
  sfixed64 objSfixed64 = 29;
  float objFloatValue = 30;
  double objDoubleValue = 31;
  bool objBool = 32;

  string string = 40;
  bytes bytes = 41;
  Color color = 42;
  User user = 43;
  Root typeRecursive = 44;

  google.protobuf.Any any = 50;
  repeated google.protobuf.Any anys = 51;

  map<string, string> ssMap = 60;
  map<string, int32> sint32Map = 61;
  map<string, User> spMap = 62;

  repeated int32 int32sPacked = 70;
  repeated int64 int64sPacked = 71;
  repeated uint32 uint32sPacked = 72;
  repeated uint64 uint64sPacked = 73;
  repeated sint32 sint32sPacked = 74;
  repeated sint64 sint64sPacked = 75;
  repeated fixed32 fixed32sPacked = 76;
  repeated fixed64 fixed64sPacked = 77;
  repeated sfixed32 sfixed32sPacked = 78;
  repeated sfixed64 sfixed64sPacked = 79;
  repeated float floatsPacked = 80;
  repeated double doublesPacked = 81;
  repeated bool boolsPacked = 82;
  repeated Color colorsPacked = 83;

  repeated int32 int32sNotPacked = 90 [packed = false];
  repeated int64 int64sNotPacked = 91 [packed = false];
  repeated uint32 uint32sNotPacked = 92 [packed = false];
  repeated uint64 uint64sNotPacked = 93 [packed = false];
  repeated sint32 sint32sNotPacked = 94 [packed = false];
  repeated sint64 sint64sNotPacked = 95 [packed = false];
  repeated fixed32 fixed32sNotPacked = 96 [packed = false];
  repeated fixed64 fixed64sNotPacked = 97 [packed = false];
  repeated sfixed32 sfixed32sNotPacked = 98 [packed = false];
  repeated sfixed64 sfixed64sNotPacked = 99 [packed = false];
  repeated float floatsNotPacked = 100 [packed = false];
  repeated double doublesNotPacked = 101 [packed = false];
  repeated bool boolsNotPacked = 102 [packed = false];
  repeated Color colorsNotPacked = 103 [packed = false];

  repeated string strings = 110;
  repeated bytes bytess = 111;
  repeated User users = 112;
}

enum Color {
  RED = 0;
  YELLOW = 1;
  BLUE = 2;
}

message User {
  string name = 1;

  Root typeRecursive = 2;
}