// Copyright 2016 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
//
//      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";

package storage_bench;

message ObjectRead{
  // The bucket string identifier.
  string bucketName = 1;
  // The object/blob string identifier.
  string objectName = 2;
}

message ObjectWrite{
   // The bucket string identifier.
  string bucketName = 1;
  // The object/blob string identifiers.
  string objectName = 2;
  // The string containing the upload file path.
  string destination = 3;
}

message EmptyResponse{
}

service StorageBenchWrapper{
  // Performs an upload from a specific object.
  rpc Write(ObjectWrite) returns (EmptyResponse) {}
  // Read a specific object.
  rpc Read(ObjectRead) returns (EmptyResponse){}
}
