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

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

#ifndef SERVICES_NETWORK_PUBLIC_MOJOM_TIMING_ALLOW_ORIGIN_MOJOM_H_
#define SERVICES_NETWORK_PUBLIC_MOJOM_TIMING_ALLOW_ORIGIN_MOJOM_H_

#include <stdint.h>

#include <limits>
#include <type_traits>
#include <utility>

#include "third_party/abseil-cpp/absl/types/optional.h"
#include "mojo/public/cpp/bindings/clone_traits.h"
#include "mojo/public/cpp/bindings/equals_traits.h"
#include "mojo/public/cpp/bindings/lib/serialization.h"
#include "mojo/public/cpp/bindings/struct_ptr.h"
#include "mojo/public/cpp/bindings/struct_traits.h"
#include "mojo/public/cpp/bindings/union_traits.h"

#include "third_party/perfetto/include/perfetto/tracing/traced_value_forward.h"

#include "services/network/public/mojom/timing_allow_origin.mojom-shared.h"
#include "services/network/public/mojom/timing_allow_origin.mojom-forward.h"
#include <string>
#include <vector>





#ifdef KYTHE_IS_RUNNING
#pragma kythe_inline_metadata "Metadata comment"
#endif


namespace network {
namespace mojom {





// @generated_from: network.mojom.TimingAllowOrigin
class  TimingAllowOrigin {
 public:
  using DataView = TimingAllowOriginDataView;
  using Data_ = internal::TimingAllowOrigin_Data;
  using Tag = Data_::TimingAllowOrigin_Tag;

  template <typename... Args>
  static TimingAllowOriginPtr New(Args&&... args) {
    static_assert(
        sizeof...(args) < 0,
        "Do not use Union::New(); to create a union of a given subtype, use "
        "New<SubType>(), not New() followed by set_<sub_type>(). To represent "
        "an empty union, mark the field or parameter as nullable in the mojom "
        "definition.");
  }
  // Construct an instance holding |serialized_origins|.
  static TimingAllowOriginPtr
  NewSerializedOrigins(
      std::vector<std::string> serialized_origins) {
    auto result = TimingAllowOriginPtr(absl::in_place);
    result->set_serialized_origins(std::move(serialized_origins));
    return result;
  }
  // Construct an instance holding |all|.
  static TimingAllowOriginPtr
  NewAll(
      uint8_t all) {
    auto result = TimingAllowOriginPtr(absl::in_place);
    result->set_all(std::move(all));
    return result;
  }

  template <typename U>
  static TimingAllowOriginPtr From(const U& u) {
    return mojo::TypeConverter<TimingAllowOriginPtr, U>::Convert(u);
  }

  template <typename U>
  U To() const {
    return mojo::TypeConverter<U, TimingAllowOrigin>::Convert(*this);
  }

  TimingAllowOrigin();
  ~TimingAllowOrigin();

  // Clone() is a template so it is only instantiated if it is used. Thus, the
  // bindings generator does not need to know whether Clone() or copy
  // constructor/assignment are available for members.
  template <typename UnionPtrType = TimingAllowOriginPtr>
  TimingAllowOriginPtr Clone() const;

  // Equals() is a template so it is only instantiated if it is used. Thus, the
  // bindings generator does not need to know whether Equals() or == operator
  // are available for members.
  template <typename T,
            typename std::enable_if<std::is_same<
                T, TimingAllowOrigin>::value>::type* = nullptr>
  bool Equals(const T& other) const;

  template <typename T,
            typename std::enable_if<std::is_same<
                T, TimingAllowOrigin>::value>::type* = nullptr>
  bool operator==(const T& rhs) const { return Equals(rhs); }

  Tag which() const {
    return tag_;
  }


  
// @generated_from: network.mojom.TimingAllowOrigin.serialized_origins
  bool is_serialized_origins() const { return tag_ == Tag::kSerializedOrigins; }

  
// @generated_from: network.mojom.TimingAllowOrigin.serialized_origins
  std::vector<std::string>& get_serialized_origins() const {
    CHECK(tag_ == Tag::kSerializedOrigins);
    return *(data_.serialized_origins);
  }

  
// @generated_from: network.mojom.TimingAllowOrigin.serialized_origins
  void set_serialized_origins(
      std::vector<std::string> serialized_origins);
  
// @generated_from: network.mojom.TimingAllowOrigin.all
  bool is_all() const { return tag_ == Tag::kAll; }

  
// @generated_from: network.mojom.TimingAllowOrigin.all
  uint8_t get_all() const {
    CHECK(tag_ == Tag::kAll);
    return data_.all;
  }

  
// @generated_from: network.mojom.TimingAllowOrigin.all
  void set_all(
      uint8_t all);

  template <typename UserType>
  static mojo::Message SerializeAsMessage(UserType* input) {
    return mojo::internal::SerializeAsMessageImpl<
        TimingAllowOrigin::DataView>(input);
  }

  template <typename UserType>
  static bool DeserializeFromMessage(mojo::Message input,
                                     UserType* output) {
    return mojo::internal::DeserializeImpl<TimingAllowOrigin::DataView>(
        input, input.payload(), input.payload_num_bytes(), output, Validate);
  }

 private:
  union Union_ {
    Union_() = default;
    ~Union_() = default;
    std::vector<std::string>* serialized_origins;
    uint8_t all;
  };

  static bool Validate(const void* data,
                       mojo::internal::ValidationContext* validation_context);

  void DestroyActive();
  Tag tag_;
  Union_ data_;
};

template <typename UnionPtrType>
TimingAllowOriginPtr TimingAllowOrigin::Clone() const {
  switch (tag_) {
    case Tag::kSerializedOrigins:
      return NewSerializedOrigins(
          mojo::Clone(*data_.serialized_origins));
    case Tag::kAll:
      return NewAll(
          mojo::Clone(data_.all));
  }
  return nullptr;
}

template <typename T,
          typename std::enable_if<std::is_same<
              T, TimingAllowOrigin>::value>::type*>
bool TimingAllowOrigin::Equals(const T& other) const {
  if (tag_ != other.which())
    return false;

  switch (tag_) {
    case Tag::kSerializedOrigins:
      return mojo::Equals(*(data_.serialized_origins), *(other.data_.serialized_origins));
    case Tag::kAll:
      return mojo::Equals(data_.all, other.data_.all);
  }

  return false;
}


}  // namespace mojom
}  // namespace network

namespace mojo {


template <>
struct  UnionTraits<::network::mojom::TimingAllowOrigin::DataView,
                                        ::network::mojom::TimingAllowOriginPtr> {
  static bool IsNull(const ::network::mojom::TimingAllowOriginPtr& input) { return !input; }
  static void SetToNull(::network::mojom::TimingAllowOriginPtr* output) { output->reset(); }

  static ::network::mojom::TimingAllowOrigin::Tag GetTag(const ::network::mojom::TimingAllowOriginPtr& input) {
    return input->which();
  }

  static const std::vector<std::string>& serialized_origins(const ::network::mojom::TimingAllowOriginPtr& input) {
    return input->get_serialized_origins();
  }

  static  uint8_t all(const ::network::mojom::TimingAllowOriginPtr& input) {
    return input->get_all();
  }

  static bool Read(::network::mojom::TimingAllowOrigin::DataView input, ::network::mojom::TimingAllowOriginPtr* output);
};

}  // namespace mojo

#endif  // SERVICES_NETWORK_PUBLIC_MOJOM_TIMING_ALLOW_ORIGIN_MOJOM_H_

/* Metadata comment
eyJtZXRhIjogW3siZW5kIjogMTM1MSwgImJlZ2luIjogMTMzNCwgImVkZ2UiOiAiJS9reXRoZS9l
ZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3Jw
dXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2Ui
OiAibW9qb20iLCAic2lnbmF0dXJlIjogIm5ldHdvcmsubW9qb20uVGltaW5nQWxsb3dPcmlnaW4i
fX0sIHsiZW5kIjogMzc1NiwgImJlZ2luIjogMzczNSwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dl
bmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAi
Y2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9q
b20iLCAic2lnbmF0dXJlIjogIm5ldHdvcmsubW9qb20uVGltaW5nQWxsb3dPcmlnaW4uc2VyaWFs
aXplZF9vcmlnaW5zIn19LCB7ImVuZCI6IDM5MzQsICJiZWdpbiI6IDM5MTIsICJlZGdlIjogIiUv
a3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6
IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxh
bmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJuZXR3b3JrLm1vam9tLlRpbWluZ0FsbG93
T3JpZ2luLnNlcmlhbGl6ZWRfb3JpZ2lucyJ9fSwgeyJlbmQiOiA0MTM3LCAiYmVnaW4iOiA0MTE1
LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmlu
ZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9t
aXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAibmV0d29yay5tb2pv
bS5UaW1pbmdBbGxvd09yaWdpbi5zZXJpYWxpemVkX29yaWdpbnMifX0sIHsiZW5kIjogNDI2Mywg
ImJlZ2luIjogNDI1NywgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjog
ImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291
cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjog
Im5ldHdvcmsubW9qb20uVGltaW5nQWxsb3dPcmlnaW4uYWxsIn19LCB7ImVuZCI6IDQzNzksICJi
ZWdpbiI6IDQzNzIsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJh
bmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJj
ZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJu
ZXR3b3JrLm1vam9tLlRpbWluZ0FsbG93T3JpZ2luLmFsbCJ9fSwgeyJlbmQiOiA0NTIwLCAiYmVn
aW4iOiA0NTEzLCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5j
aG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2Uu
Y29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAibmV0
d29yay5tb2pvbS5UaW1pbmdBbGxvd09yaWdpbi5hbGwifX1dLCAidHlwZSI6ICJreXRoZTAifQ==
*/