text: /*
   * Copyright 2016 Google Inc. All rights reserved.
   *
   * 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.
   */
  
  #ifndef NET_GRPC_COMPILER_JAVA_GENERATOR_H_
  #define NET_GRPC_COMPILER_JAVA_GENERATOR_H_
  
  #include <stdlib.h>  // for abort()
  #include <iostream>
  #include <map>
  #include <string>
  
  #include "src/compiler/schema_interface.h"
  
  class LogMessageVoidify {
   public:
    LogMessageVoidify() {}
    // This has to be an operator with a precedence lower than << but
    // higher than ?:
    void operator&(std::ostream&) {}
  };
  
  class LogHelper {
    std::ostream* os_;
  
   public:
    LogHelper(std::ostream* os) : os_(os) {}
  #if defined(_MSC_VER)
  #pragma warning(push)
  #pragma warning( \
      disable : 4722)  // the flow of control terminates in a destructor
    // (needed to compile ~LogHelper where destructor emits abort intentionally -
    // inherited from grpc/java code generator).
  #endif
    ~LogHelper() {
      *os_ << std::endl;
      ::abort();
    }
  #if defined(_MSC_VER)
  #pragma warning(pop)
  #endif
    std::ostream& get_os() const { return *os_; }
  };
  
  // Abort the program after logging the mesage if the given condition is not
  // true. Otherwise, do nothing.
  #define GRPC_CODEGEN_CHECK(x)                                            \
    (x) ? (void)0                                                          \
        : LogMessageVoidify() & LogHelper(&std::cerr).get_os()             \
                                    << "CHECK FAILED: " << __FILE__ << ":" \
                                    << __LINE__ << ": "
  
  // Abort the program after logging the mesage.
  #define GRPC_CODEGEN_FAIL GRPC_CODEGEN_CHECK(false)
  
  using namespace std;
  
  namespace grpc_java_generator {
  struct Parameters {
    //        //Defines the custom parameter types for methods
    //        //eg: flatbuffers uses flatbuffers.Builder as input for the client
    //        and output for the server grpc::string custom_method_io_type;
  
    // Package name for the service
    grpc::string package_name;
  };
  
  // Return the source of the generated service file.
  grpc::string GenerateServiceSource(grpc_generator::File* file,
                                     const grpc_generator::Service* service,
                                     grpc_java_generator::Parameters* parameters);
  
  }  // namespace grpc_java_generator
  
  #endif  // NET_GRPC_COMPILER_JAVA_GENERATOR_H_
  