/* Generated by the protocol buffer compiler.  DO NOT EDIT! */
/* Generated from: google/protobuf/api.proto */

#ifndef PROTOBUF_C_google_2fprotobuf_2fapi_2eproto__INCLUDED
#define PROTOBUF_C_google_2fprotobuf_2fapi_2eproto__INCLUDED

#include <protobuf-c/protobuf-c.h>

PROTOBUF_C__BEGIN_DECLS

#if PROTOBUF_C_VERSION_NUMBER < 1000000
# error This file was generated by a newer version of protoc-c which is incompatible with your libprotobuf-c headers. Please update your headers.
#elif 1002001 < PROTOBUF_C_MIN_COMPILER_VERSION
# error This file was generated by an older version of protoc-c which is incompatible with your libprotobuf-c headers. Please regenerate this file with a newer version of protoc-c.
#endif

#include "google/protobuf/source_context.pb-c.h"
#include "google/protobuf/type.pb-c.h"

typedef struct _Google__Protobuf__Api Google__Protobuf__Api;
typedef struct _Google__Protobuf__Method Google__Protobuf__Method;
typedef struct _Google__Protobuf__Mixin Google__Protobuf__Mixin;


/* --- enums --- */


/* --- messages --- */

/*
 * Api is a light-weight descriptor for a protocol buffer service.
 */
struct  _Google__Protobuf__Api
{
  ProtobufCMessage base;
  /*
   * The fully qualified name of this api, including package name
   * followed by the api's simple name.
   */
  char *name;
  /*
   * The methods of this api, in unspecified order.
   */
  size_t n_methods;
  Google__Protobuf__Method **methods;
  /*
   * Any metadata attached to the API.
   */
  size_t n_options;
  Google__Protobuf__Option **options;
  /*
   * A version string for this api. If specified, must have the form
   * `major-version.minor-version`, as in `1.10`. If the minor version
   * is omitted, it defaults to zero. If the entire version field is
   * empty, the major version is derived from the package name, as
   * outlined below. If the field is not empty, the version in the
   * package name will be verified to be consistent with what is
   * provided here.
   * The versioning schema uses [semantic
   * versioning](http://semver.org) where the major version number
   * indicates a breaking change and the minor version an additive,
   * non-breaking change. Both version numbers are signals to users
   * what to expect from different versions, and should be carefully
   * chosen based on the product plan.
   * The major version is also reflected in the package name of the
   * API, which must end in `v<major-version>`, as in
   * `google.feature.v1`. For major versions 0 and 1, the suffix can
   * be omitted. Zero major versions must only be used for
   * experimental, none-GA apis.
   */
  char *version;
  /*
   * Source context for the protocol buffer service represented by this
   * message.
   */
  Google__Protobuf__SourceContext *source_context;
  /*
   * Included APIs. See [Mixin][].
   */
  size_t n_mixins;
  Google__Protobuf__Mixin **mixins;
  /*
   * The source syntax of the service.
   */
  protobuf_c_boolean has_syntax;
  Google__Protobuf__Syntax syntax;
};
#define GOOGLE__PROTOBUF__API__INIT \
 { PROTOBUF_C_MESSAGE_INIT (&google__protobuf__api__descriptor) \
    , NULL, 0,NULL, 0,NULL, NULL, NULL, 0,NULL, 0,0 }


/*
 * Method represents a method of an api.
 */
struct  _Google__Protobuf__Method
{
  ProtobufCMessage base;
  /*
   * The simple name of this method.
   */
  char *name;
  /*
   * A URL of the input message type.
   */
  char *request_type_url;
  /*
   * If true, the request is streamed.
   */
  protobuf_c_boolean has_request_streaming;
  protobuf_c_boolean request_streaming;
  /*
   * The URL of the output message type.
   */
  char *response_type_url;
  /*
   * If true, the response is streamed.
   */
  protobuf_c_boolean has_response_streaming;
  protobuf_c_boolean response_streaming;
  /*
   * Any metadata attached to the method.
   */
  size_t n_options;
  Google__Protobuf__Option **options;
  /*
   * The source syntax of this method.
   */
  protobuf_c_boolean has_syntax;
  Google__Protobuf__Syntax syntax;
};
#define GOOGLE__PROTOBUF__METHOD__INIT \
 { PROTOBUF_C_MESSAGE_INIT (&google__protobuf__method__descriptor) \
    , NULL, NULL, 0,0, NULL, 0,0, 0,NULL, 0,0 }


/*
 * Declares an API to be included in this API. The including API must
 * redeclare all the methods from the included API, but documentation
 * and options are inherited as follows:
 * - If after comment and whitespace stripping, the documentation
 *   string of the redeclared method is empty, it will be inherited
 *   from the original method.
 * - Each annotation belonging to the service config (http,
 *   visibility) which is not set in the redeclared method will be
 *   inherited.
 * - If an http annotation is inherited, the path pattern will be
 *   modified as follows. Any version prefix will be replaced by the
 *   version of the including API plus the [root][] path if specified.
 * Example of a simple mixin:
 *     package google.acl.v1;
 *     service AccessControl {
 *       // Get the underlying ACL object.
 *       rpc GetAcl(GetAclRequest) returns (Acl) {
 *         option (google.api.http).get = "/v1/{resource=**}:getAcl";
 *       }
 *     }
 *     package google.storage.v2;
 *     service Storage {
 *       rpc GetAcl(GetAclRequest) returns (Acl);
 *       // Get a data record.
 *       rpc GetData(GetDataRequest) returns (Data) {
 *         option (google.api.http).get = "/v2/{resource=**}";
 *       }
 *     }
 * Example of a mixin configuration:
 *     apis:
 *     - name: google.storage.v2.Storage
 *       mixins:
 *       - name: google.acl.v1.AccessControl
 * The mixin construct implies that all methods in `AccessControl` are
 * also declared with same name and request/response types in
 * `Storage`. A documentation generator or annotation processor will
 * see the effective `Storage.GetAcl` method after inherting
 * documentation and annotations as follows:
 *     service Storage {
 *       // Get the underlying ACL object.
 *       rpc GetAcl(GetAclRequest) returns (Acl) {
 *         option (google.api.http).get = "/v2/{resource=**}:getAcl";
 *       }
 *       ...
 *     }
 * Note how the version in the path pattern changed from `v1` to `v2`.
 * If the `root` field in the mixin is specified, it should be a
 * relative path under which inherited HTTP paths are placed. Example:
 *     apis:
 *     - name: google.storage.v2.Storage
 *       mixins:
 *       - name: google.acl.v1.AccessControl
 *         root: acls
 * This implies the following inherited HTTP annotation:
 *     service Storage {
 *       // Get the underlying ACL object.
 *       rpc GetAcl(GetAclRequest) returns (Acl) {
 *         option (google.api.http).get = "/v2/acls/{resource=**}:getAcl";
 *       }
 *       ...
 *     }
 */
struct  _Google__Protobuf__Mixin
{
  ProtobufCMessage base;
  /*
   * The fully qualified name of the API which is included.
   */
  char *name;
  /*
   * If non-empty specifies a path under which inherited HTTP paths
   * are rooted.
   */
  char *root;
};
#define GOOGLE__PROTOBUF__MIXIN__INIT \
 { PROTOBUF_C_MESSAGE_INIT (&google__protobuf__mixin__descriptor) \
    , NULL, NULL }


/* Google__Protobuf__Api methods */
void   google__protobuf__api__init
                     (Google__Protobuf__Api         *message);
size_t google__protobuf__api__get_packed_size
                     (const Google__Protobuf__Api   *message);
size_t google__protobuf__api__pack
                     (const Google__Protobuf__Api   *message,
                      uint8_t             *out);
size_t google__protobuf__api__pack_to_buffer
                     (const Google__Protobuf__Api   *message,
                      ProtobufCBuffer     *buffer);
Google__Protobuf__Api *
       google__protobuf__api__unpack
                     (ProtobufCAllocator  *allocator,
                      size_t               len,
                      const uint8_t       *data);
void   google__protobuf__api__free_unpacked
                     (Google__Protobuf__Api *message,
                      ProtobufCAllocator *allocator);
/* Google__Protobuf__Method methods */
void   google__protobuf__method__init
                     (Google__Protobuf__Method         *message);
size_t google__protobuf__method__get_packed_size
                     (const Google__Protobuf__Method   *message);
size_t google__protobuf__method__pack
                     (const Google__Protobuf__Method   *message,
                      uint8_t             *out);
size_t google__protobuf__method__pack_to_buffer
                     (const Google__Protobuf__Method   *message,
                      ProtobufCBuffer     *buffer);
Google__Protobuf__Method *
       google__protobuf__method__unpack
                     (ProtobufCAllocator  *allocator,
                      size_t               len,
                      const uint8_t       *data);
void   google__protobuf__method__free_unpacked
                     (Google__Protobuf__Method *message,
                      ProtobufCAllocator *allocator);
/* Google__Protobuf__Mixin methods */
void   google__protobuf__mixin__init
                     (Google__Protobuf__Mixin         *message);
size_t google__protobuf__mixin__get_packed_size
                     (const Google__Protobuf__Mixin   *message);
size_t google__protobuf__mixin__pack
                     (const Google__Protobuf__Mixin   *message,
                      uint8_t             *out);
size_t google__protobuf__mixin__pack_to_buffer
                     (const Google__Protobuf__Mixin   *message,
                      ProtobufCBuffer     *buffer);
Google__Protobuf__Mixin *
       google__protobuf__mixin__unpack
                     (ProtobufCAllocator  *allocator,
                      size_t               len,
                      const uint8_t       *data);
void   google__protobuf__mixin__free_unpacked
                     (Google__Protobuf__Mixin *message,
                      ProtobufCAllocator *allocator);
/* --- per-message closures --- */

typedef void (*Google__Protobuf__Api_Closure)
                 (const Google__Protobuf__Api *message,
                  void *closure_data);
typedef void (*Google__Protobuf__Method_Closure)
                 (const Google__Protobuf__Method *message,
                  void *closure_data);
typedef void (*Google__Protobuf__Mixin_Closure)
                 (const Google__Protobuf__Mixin *message,
                  void *closure_data);

/* --- services --- */


/* --- descriptors --- */

extern const ProtobufCMessageDescriptor google__protobuf__api__descriptor;
extern const ProtobufCMessageDescriptor google__protobuf__method__descriptor;
extern const ProtobufCMessageDescriptor google__protobuf__mixin__descriptor;

PROTOBUF_C__END_DECLS


#endif  /* PROTOBUF_C_google_2fprotobuf_2fapi_2eproto__INCLUDED */
