// services/network/public/mojom/timing_allow_origin.mojom-blink.cc is auto generated by mojom_bindings_generator.py, do not edit

// Copyright 2013 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#if defined(__clang__)
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wunused-private-field"
#endif

#include "services/network/public/mojom/timing_allow_origin.mojom-blink.h"
#include <stdint.h>
#include <utility>
#include "base/notreached.h"
#include "mojo/public/cpp/bindings/lib/default_construct_tag_internal.h"
#include "mojo/public/cpp/bindings/lib/serialization.h"
#include "mojo/public/cpp/bindings/lib/validate_params.h"
#include "mojo/public/cpp/bindings/lib/validation_errors.h"
#include "mojo/public/cpp/bindings/mojo_buildflags.h"
#include "third_party/perfetto/include/perfetto/tracing/traced_value.h"

#include "services/network/public/mojom/timing_allow_origin.mojom-params-data.h"
#include "services/network/public/mojom/timing_allow_origin.mojom-shared-message-ids.h"

#include "services/network/public/mojom/timing_allow_origin.mojom-blink-import-headers.h"
#include "services/network/public/mojom/timing_allow_origin.mojom-blink-test-utils.h"
#include "mojo/public/cpp/bindings/lib/wtf_serialization.h"


namespace network::mojom::blink {
TimingAllowOriginPtr
TimingAllowOrigin::NewSerializedOrigins(
    ::blink::Vector<::blink::String> value) {
  return TimingAllowOriginPtr(
      std::in_place,
      std::in_place_index<static_cast<size_t>(Tag::kSerializedOrigins)>,
      std::move(value));
}

TimingAllowOriginPtr
TimingAllowOrigin::NewAll(
    uint8_t value) {
  return TimingAllowOriginPtr(
      std::in_place,
      std::in_place_index<static_cast<size_t>(Tag::kAll)>,
      std::move(value));
}

TimingAllowOrigin::TimingAllowOrigin(
    std::in_place_index_t<static_cast<size_t>(Tag::kSerializedOrigins)>,
    ::blink::Vector<::blink::String> value)
    : tag_(Tag::kSerializedOrigins),
      data_(std::in_place_index<static_cast<size_t>(Tag::kSerializedOrigins)>,
            std::move(value)) {}

TimingAllowOrigin::TimingAllowOrigin(
    std::in_place_index_t<static_cast<size_t>(Tag::kAll)>,
    uint8_t value)
    : tag_(Tag::kAll),
      data_(std::in_place_index<static_cast<size_t>(Tag::kAll)>,
            std::move(value)) {}
TimingAllowOrigin::~TimingAllowOrigin() {
  DestroyActive();
}

void TimingAllowOrigin::set_serialized_origins(::blink::Vector<::blink::String> serialized_origins) {
  if (tag_ == Tag::kSerializedOrigins) {
    data_.serialized_origins = std::move(serialized_origins);
  } else {
    DestroyActive();
    tag_ = Tag::kSerializedOrigins;
    new (&data_.serialized_origins) ::blink::Vector<::blink::String>(
        std::move(serialized_origins));
  }
}

void TimingAllowOrigin::set_all(uint8_t all) {
  if (tag_ != Tag::kAll) {
    DestroyActive();
    tag_ = Tag::kAll;
  }
  data_.all = all;
}


TimingAllowOrigin::Union_::Union_(
    std::in_place_index_t<static_cast<size_t>(Tag::kSerializedOrigins)>,
    ::blink::Vector<::blink::String> value)
    : serialized_origins(std::move(value)) {}

TimingAllowOrigin::Union_::Union_(
    std::in_place_index_t<static_cast<size_t>(Tag::kAll)>,
    uint8_t value)
    : all(std::move(value)) {}

void TimingAllowOrigin::DestroyActive() {
  switch (tag_) {

    case Tag::kSerializedOrigins:
      std::destroy_at(&data_.serialized_origins);
      break;
    case Tag::kAll:
      std::destroy_at(&data_.all);
      break;
  }
}

bool TimingAllowOrigin::Validate(
    const void* data,
    mojo::internal::ValidationContext* validation_context) {
  return Data_::Validate(data, validation_context, false);
}


}  // network::mojom::blink


namespace mojo {

// static
bool UnionTraits<::network::mojom::blink::TimingAllowOrigin::DataView, ::network::mojom::blink::TimingAllowOriginPtr>::Read(
    ::network::mojom::blink::TimingAllowOrigin::DataView input,
    ::network::mojom::blink::TimingAllowOriginPtr* output) {
  using UnionType = ::network::mojom::blink::TimingAllowOrigin;
  using Tag = UnionType::Tag;

  switch (input.tag()) {
    case Tag::kSerializedOrigins: {
      ::blink::Vector<::blink::String> result_serialized_origins{};
      if (!input.ReadSerializedOrigins(&result_serialized_origins))
        return false;

      *output = UnionType::NewSerializedOrigins(
          std::move(result_serialized_origins));
      break;
    }
    case Tag::kAll: {
      *output = UnionType::NewAll(input.all());
      break;
    }
    default:

      return false;
  }
  return true;
}

}  // namespace mojo


// Symbols declared in the -test-utils.h header are defined here instead of a
// separate .cc file to save compile time.


namespace network::mojom::blink {




}  // network::mojom::blink


#if defined(__clang__)
#pragma clang diagnostic pop
#endif