%YAML 1.2
--- |
  // Copyright 2022 gRPC authors.
  //
  // 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.

  // This file is autogenerated from:
  // templates/include/grpcpp/version_info.h.template

  #ifndef GRPCPP_VERSION_INFO_H
  #define GRPCPP_VERSION_INFO_H

  #define GRPC_CPP_VERSION_MAJOR ${settings.cpp_version.major}
  #define GRPC_CPP_VERSION_MINOR ${settings.cpp_version.minor}
  #define GRPC_CPP_VERSION_PATCH ${settings.cpp_version.patch}
  #define GRPC_CPP_VERSION_TAG "${settings.cpp_version.tag or ''}"
  #define GRPC_CPP_VERSION_STRING "${settings.cpp_version}"

  #endif  // GRPCPP_VERSION_INFO_H
