// WARNING: This file is machine generated by fidlgen.

// fidl_experiment = output_index_json

#include <fidl/test.requestflexibleenvelope/cpp/wire_types.h>

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wshadow"

auto ::test_requestflexibleenvelope::wire::FlexibleFoo::Which() const -> ::test_requestflexibleenvelope::wire::FlexibleFoo::Tag {
  ZX_ASSERT(!has_invalid_tag());
  switch (ordinal_) {
    case ::test_requestflexibleenvelope::wire::FlexibleFoo::Ordinal::kS:
    case ::test_requestflexibleenvelope::wire::FlexibleFoo::Ordinal::kI:
      return static_cast<::test_requestflexibleenvelope::wire::FlexibleFoo::Tag>(ordinal_);
    default:
      return ::test_requestflexibleenvelope::wire::FlexibleFoo::Tag::_do_not_handle_this__write_a_default_case_instead;
  }
}

void ::test_requestflexibleenvelope::wire::FlexibleFoo::SizeAndOffsetAssertionHelper() {
  static_assert(sizeof(FlexibleFoo) == sizeof(fidl_union_t));
  static_assert(offsetof(FlexibleFoo, ordinal_) == offsetof(fidl_union_t, tag));
  static_assert(offsetof(FlexibleFoo, envelope_) == offsetof(fidl_union_t, envelope));
}

void ::test_requestflexibleenvelope::wire::StrictFoo::SizeAndOffsetAssertionHelper() {
  static_assert(sizeof(StrictFoo) == sizeof(fidl_union_t));
  static_assert(offsetof(StrictFoo, ordinal_) == offsetof(fidl_union_t, tag));
  static_assert(offsetof(StrictFoo, envelope_) == offsetof(fidl_union_t, envelope));
}

#pragma clang diagnostic pop
