// Copyright 2018 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// gRPC definitions for testing grpc_async_adapter.

syntax = "proto3";

package test_rpcs;

message EmptyRpcRequest {}
message EmptyRpcResponse {}

message EchoIntRpcRequest {
  int32 int_to_echo = 1;
}

message EchoIntRpcResponse {
  int32 echoed_int = 1;
}

message HeavyRpcRequest {
  string data = 1;
}

message HeavyRpcResponse {
  string data = 1;
}

service ExampleService {
  rpc EmptyRpc(EmptyRpcRequest) returns (EmptyRpcResponse);
  rpc EchoIntRpc(EchoIntRpcRequest) returns (EchoIntRpcResponse);
  rpc HeavyRpc(HeavyRpcRequest) returns (HeavyRpcResponse);
}
