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

#ifndef PROTOBUF_C_google_2fprotobuf_2fany_2eproto__INCLUDED
#define PROTOBUF_C_google_2fprotobuf_2fany_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


typedef struct _Google__Protobuf__Any Google__Protobuf__Any;


/* --- enums --- */


/* --- messages --- */

/*
 * `Any` contains an arbitrary serialized protocol buffer message along with a
 * URL that describes the type of the serialized message.
 * Protobuf library provides support to pack/unpack Any values in the form
 * of utility functions or additional generated methods of the Any type.
 * Example 1: Pack and unpack a message in C++.
 *     Foo foo = ...;
 *     Any any;
 *     any.PackFrom(foo);
 *     ...
 *     if (any.UnpackTo(&foo)) {
 *       ...
 *     }
 * Example 2: Pack and unpack a message in Java.
 *     Foo foo = ...;
 *     Any any = Any.pack(foo);
 *     ...
 *     if (any.is(Foo.class)) {
 *       foo = any.unpack(Foo.class);
 *     }
 *  Example 3: Pack and unpack a message in Python.
 *     foo = Foo(...)
 *     any = Any()
 *     any.Pack(foo)
 *     ...
 *     if any.Is(Foo.DESCRIPTOR):
 *       any.Unpack(foo)
 *       ...
 * The pack methods provided by protobuf library will by default use
 * 'type.googleapis.com/full.type.name' as the type URL and the unpack
 * methods only use the fully qualified type name after the last '/'
 * in the type URL, for example "foo.bar.com/x/y.z" will yield type
 * name "y.z".
 * JSON
 * ====
 * The JSON representation of an `Any` value uses the regular
 * representation of the deserialized, embedded message, with an
 * additional field `@type` which contains the type URL. Example:
 *     package google.profile;
 *     message Person {
 *       string first_name = 1;
 *       string last_name = 2;
 *     }
 *     {
 *       "@type": "type.googleapis.com/google.profile.Person",
 *       "firstName": <string>,
 *       "lastName": <string>
 *     }
 * If the embedded message type is well-known and has a custom JSON
 * representation, that representation will be embedded adding a field
 * `value` which holds the custom JSON in addition to the `@type`
 * field. Example (for message [google.protobuf.Duration][]):
 *     {
 *       "@type": "type.googleapis.com/google.protobuf.Duration",
 *       "value": "1.212s"
 *     }
 */
struct  _Google__Protobuf__Any
{
  ProtobufCMessage base;
  /*
   * A URL/resource name whose content describes the type of the
   * serialized protocol buffer message.
   * For URLs which use the scheme `http`, `https`, or no scheme, the
   * following restrictions and interpretations apply:
   * * If no scheme is provided, `https` is assumed.
   * * The last segment of the URL's path must represent the fully
   *   qualified name of the type (as in `path/google.protobuf.Duration`).
   *   The name should be in a canonical form (e.g., leading "." is
   *   not accepted).
   * * An HTTP GET on the URL must yield a [google.protobuf.Type][]
   *   value in binary format, or produce an error.
   * * Applications are allowed to cache lookup results based on the
   *   URL, or have them precompiled into a binary to avoid any
   *   lookup. Therefore, binary compatibility needs to be preserved
   *   on changes to types. (Use versioned type names to manage
   *   breaking changes.)
   * Schemes other than `http`, `https` (or the empty scheme) might be
   * used with implementation specific semantics.
   */
  char *type_url;
  /*
   * Must be a valid serialized protocol buffer of the above specified type.
   */
  protobuf_c_boolean has_value;
  ProtobufCBinaryData value;
};
#define GOOGLE__PROTOBUF__ANY__INIT \
 { PROTOBUF_C_MESSAGE_INIT (&google__protobuf__any__descriptor) \
    , NULL, 0,{0,NULL} }


/* Google__Protobuf__Any methods */
void   google__protobuf__any__init
                     (Google__Protobuf__Any         *message);
size_t google__protobuf__any__get_packed_size
                     (const Google__Protobuf__Any   *message);
size_t google__protobuf__any__pack
                     (const Google__Protobuf__Any   *message,
                      uint8_t             *out);
size_t google__protobuf__any__pack_to_buffer
                     (const Google__Protobuf__Any   *message,
                      ProtobufCBuffer     *buffer);
Google__Protobuf__Any *
       google__protobuf__any__unpack
                     (ProtobufCAllocator  *allocator,
                      size_t               len,
                      const uint8_t       *data);
void   google__protobuf__any__free_unpacked
                     (Google__Protobuf__Any *message,
                      ProtobufCAllocator *allocator);
/* --- per-message closures --- */

typedef void (*Google__Protobuf__Any_Closure)
                 (const Google__Protobuf__Any *message,
                  void *closure_data);

/* --- services --- */


/* --- descriptors --- */

extern const ProtobufCMessageDescriptor google__protobuf__any__descriptor;

PROTOBUF_C__END_DECLS


#endif  /* PROTOBUF_C_google_2fprotobuf_2fany_2eproto__INCLUDED */
