// Copyright 2018 Google LLC
//
// Licensed 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
//
//     https://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";

package google.testdata;

option java_package = "com.google.google.testdata";

// This is a service description.
// It takes up multiple lines, like so.
service FooService {
  // FooMethod does something.
  // This comment also takes up multiple lines.
  rpc FooMethod(FooMessage) returns (FooMessage.BarMessage);
}

// This is another service description.
service BarService {
  // BarMethod does another thing.
  rpc BarMethod(FooMessage) returns (FooMessage.BarMessage);
}

// This is a message descxription.
// Lorum ipsum dolor sit amet consectetur adipiscing elit.
message FooMessage {
  // This is a field description for field_one.
  // And here is the second line of that description.
  string field_one = 1;  // A field trailing comment.

  // This is another field description.
  string field_two = 2;
  // Another field trailing comment.

  // This is an inner message description for BarMessage.
  message BarMessage {
    // A third leading comment for field_three.
    string field_three = 1;

    /*
     * This is a block comment for field_two.
     */
    string field_two = 2;
  }

  // An inner enum.
  enum FoodEnum {
    // Unspecified value.
    FOOD_UNSPECIFIED = 0;

    // 😋 🍚.
    RICE = 1;

    // 🤤 🍫.
    CHOCOLATE = 2;
  }

  // An inner oneof.
  oneof InnerOneof {
    // An InnerOneof comment for its field.
    string field_four = 6;
  }
}

// This is an outer enum.
enum OuterEnum {
  // Another unspecified value.
  VALUE_UNSPECIFIED = 0;
}
