/* This file was generated by upbc (the upb compiler) from the input
 * file:
 *
 *     envoy/api/v2/eds.proto
 *
 * Do not edit -- your changes will be discarded when the file is
 * regenerated. */

#ifndef ENVOY_API_V2_EDS_PROTO_UPB_H_
#define ENVOY_API_V2_EDS_PROTO_UPB_H_

#include "upb/generated_util.h"
#include "upb/msg.h"
#include "upb/decode.h"
#include "upb/encode.h"

/* Public Imports. */
#include "envoy/api/v2/endpoint.upb.h"

#include "upb/port_def.inc"

#ifdef __cplusplus
extern "C" {
#endif

struct envoy_api_v2_EdsDummy;
typedef struct envoy_api_v2_EdsDummy envoy_api_v2_EdsDummy;
extern const upb_msglayout envoy_api_v2_EdsDummy_msginit;


/* envoy.api.v2.EdsDummy */

UPB_INLINE envoy_api_v2_EdsDummy *envoy_api_v2_EdsDummy_new(upb_arena *arena) {
  return (envoy_api_v2_EdsDummy *)upb_msg_new(&envoy_api_v2_EdsDummy_msginit, arena);
}
UPB_INLINE envoy_api_v2_EdsDummy *envoy_api_v2_EdsDummy_parse(const char *buf, size_t size,
                        upb_arena *arena) {
  envoy_api_v2_EdsDummy *ret = envoy_api_v2_EdsDummy_new(arena);
  return (ret && upb_decode(buf, size, ret, &envoy_api_v2_EdsDummy_msginit, arena)) ? ret : NULL;
}
UPB_INLINE char *envoy_api_v2_EdsDummy_serialize(const envoy_api_v2_EdsDummy *msg, upb_arena *arena, size_t *len) {
  return upb_encode(msg, &envoy_api_v2_EdsDummy_msginit, arena, len);
}



#ifdef __cplusplus
}  /* extern "C" */
#endif

#include "upb/port_undef.inc"

#endif  /* ENVOY_API_V2_EDS_PROTO_UPB_H_ */
