// third_party/blink/public/mojom/tokens/tokens.mojom-data-view.h is auto generated by mojom_bindings_generator.py, do not edit

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

// This file defines XDataView for type traits and can be included in
// _mojom_traits.h definitions but otherwise please use .mojom-forward.h,
// .mojom-shared.h or .mojom.h.

// IWYU pragma: private
// IWYU pragma: friend "traits"

#ifndef THIRD_PARTY_BLINK_PUBLIC_MOJOM_TOKENS_TOKENS_MOJOM_DATA_VIEW_H_
#define THIRD_PARTY_BLINK_PUBLIC_MOJOM_TOKENS_TOKENS_MOJOM_DATA_VIEW_H_

#include <stdint.h>

#include <functional>
#include <iosfwd>
#include <type_traits>
#include <utility>
#include "mojo/public/cpp/bindings/array_data_view.h"
#include "mojo/public/cpp/bindings/string_data_view.h"
#include "mojo/public/cpp/bindings/lib/serialization.h"

#include "third_party/blink/public/mojom/tokens/tokens.mojom-shared-internal.h"
#include "mojo/public/mojom/base/unguessable_token.mojom-shared.h"


namespace blink::mojom {
class DocumentTokenDataView;

class LocalFrameTokenDataView;

class RemoteFrameTokenDataView;

class DedicatedWorkerTokenDataView;

class ServiceWorkerTokenDataView;

class SharedWorkerTokenDataView;

class AnimationWorkletTokenDataView;

class AudioWorkletTokenDataView;

class LayoutWorkletTokenDataView;

class PaintWorkletTokenDataView;

class SharedStorageWorkletTokenDataView;

class ShadowRealmTokenDataView;

class SameDocNavigationScreenshotDestinationTokenDataView;

class V8ContextTokenDataView;

class ViewTransitionTokenDataView;

class WebNNContextTokenDataView;

class WebNNPendingConstantTokenDataView;

class WebNNTensorTokenDataView;

class WebNNGraphTokenDataView;

class FrameTokenDataView;
class WorkerTokenDataView;
class WorkletTokenDataView;
class ExecutionContextTokenDataView;
class WebGPUExecutionContextTokenDataView;


}  // blink::mojom


namespace mojo {
namespace internal {

template <>
struct MojomTypeTraits<::blink::mojom::DocumentTokenDataView> {
  using Data = ::blink::mojom::internal::DocumentToken_Data;
  using DataAsArrayElement = Pointer<Data>;
  static constexpr MojomTypeCategory category = MojomTypeCategory::kStruct;
};

template <>
struct MojomTypeTraits<::blink::mojom::LocalFrameTokenDataView> {
  using Data = ::blink::mojom::internal::LocalFrameToken_Data;
  using DataAsArrayElement = Pointer<Data>;
  static constexpr MojomTypeCategory category = MojomTypeCategory::kStruct;
};

template <>
struct MojomTypeTraits<::blink::mojom::RemoteFrameTokenDataView> {
  using Data = ::blink::mojom::internal::RemoteFrameToken_Data;
  using DataAsArrayElement = Pointer<Data>;
  static constexpr MojomTypeCategory category = MojomTypeCategory::kStruct;
};

template <>
struct MojomTypeTraits<::blink::mojom::DedicatedWorkerTokenDataView> {
  using Data = ::blink::mojom::internal::DedicatedWorkerToken_Data;
  using DataAsArrayElement = Pointer<Data>;
  static constexpr MojomTypeCategory category = MojomTypeCategory::kStruct;
};

template <>
struct MojomTypeTraits<::blink::mojom::ServiceWorkerTokenDataView> {
  using Data = ::blink::mojom::internal::ServiceWorkerToken_Data;
  using DataAsArrayElement = Pointer<Data>;
  static constexpr MojomTypeCategory category = MojomTypeCategory::kStruct;
};

template <>
struct MojomTypeTraits<::blink::mojom::SharedWorkerTokenDataView> {
  using Data = ::blink::mojom::internal::SharedWorkerToken_Data;
  using DataAsArrayElement = Pointer<Data>;
  static constexpr MojomTypeCategory category = MojomTypeCategory::kStruct;
};

template <>
struct MojomTypeTraits<::blink::mojom::AnimationWorkletTokenDataView> {
  using Data = ::blink::mojom::internal::AnimationWorkletToken_Data;
  using DataAsArrayElement = Pointer<Data>;
  static constexpr MojomTypeCategory category = MojomTypeCategory::kStruct;
};

template <>
struct MojomTypeTraits<::blink::mojom::AudioWorkletTokenDataView> {
  using Data = ::blink::mojom::internal::AudioWorkletToken_Data;
  using DataAsArrayElement = Pointer<Data>;
  static constexpr MojomTypeCategory category = MojomTypeCategory::kStruct;
};

template <>
struct MojomTypeTraits<::blink::mojom::LayoutWorkletTokenDataView> {
  using Data = ::blink::mojom::internal::LayoutWorkletToken_Data;
  using DataAsArrayElement = Pointer<Data>;
  static constexpr MojomTypeCategory category = MojomTypeCategory::kStruct;
};

template <>
struct MojomTypeTraits<::blink::mojom::PaintWorkletTokenDataView> {
  using Data = ::blink::mojom::internal::PaintWorkletToken_Data;
  using DataAsArrayElement = Pointer<Data>;
  static constexpr MojomTypeCategory category = MojomTypeCategory::kStruct;
};

template <>
struct MojomTypeTraits<::blink::mojom::SharedStorageWorkletTokenDataView> {
  using Data = ::blink::mojom::internal::SharedStorageWorkletToken_Data;
  using DataAsArrayElement = Pointer<Data>;
  static constexpr MojomTypeCategory category = MojomTypeCategory::kStruct;
};

template <>
struct MojomTypeTraits<::blink::mojom::ShadowRealmTokenDataView> {
  using Data = ::blink::mojom::internal::ShadowRealmToken_Data;
  using DataAsArrayElement = Pointer<Data>;
  static constexpr MojomTypeCategory category = MojomTypeCategory::kStruct;
};

template <>
struct MojomTypeTraits<::blink::mojom::SameDocNavigationScreenshotDestinationTokenDataView> {
  using Data = ::blink::mojom::internal::SameDocNavigationScreenshotDestinationToken_Data;
  using DataAsArrayElement = Pointer<Data>;
  static constexpr MojomTypeCategory category = MojomTypeCategory::kStruct;
};

template <>
struct MojomTypeTraits<::blink::mojom::V8ContextTokenDataView> {
  using Data = ::blink::mojom::internal::V8ContextToken_Data;
  using DataAsArrayElement = Pointer<Data>;
  static constexpr MojomTypeCategory category = MojomTypeCategory::kStruct;
};

template <>
struct MojomTypeTraits<::blink::mojom::ViewTransitionTokenDataView> {
  using Data = ::blink::mojom::internal::ViewTransitionToken_Data;
  using DataAsArrayElement = Pointer<Data>;
  static constexpr MojomTypeCategory category = MojomTypeCategory::kStruct;
};

template <>
struct MojomTypeTraits<::blink::mojom::WebNNContextTokenDataView> {
  using Data = ::blink::mojom::internal::WebNNContextToken_Data;
  using DataAsArrayElement = Pointer<Data>;
  static constexpr MojomTypeCategory category = MojomTypeCategory::kStruct;
};

template <>
struct MojomTypeTraits<::blink::mojom::WebNNPendingConstantTokenDataView> {
  using Data = ::blink::mojom::internal::WebNNPendingConstantToken_Data;
  using DataAsArrayElement = Pointer<Data>;
  static constexpr MojomTypeCategory category = MojomTypeCategory::kStruct;
};

template <>
struct MojomTypeTraits<::blink::mojom::WebNNTensorTokenDataView> {
  using Data = ::blink::mojom::internal::WebNNTensorToken_Data;
  using DataAsArrayElement = Pointer<Data>;
  static constexpr MojomTypeCategory category = MojomTypeCategory::kStruct;
};

template <>
struct MojomTypeTraits<::blink::mojom::WebNNGraphTokenDataView> {
  using Data = ::blink::mojom::internal::WebNNGraphToken_Data;
  using DataAsArrayElement = Pointer<Data>;
  static constexpr MojomTypeCategory category = MojomTypeCategory::kStruct;
};

template <>
struct MojomTypeTraits<::blink::mojom::FrameTokenDataView> {
  using Data = ::blink::mojom::internal::FrameToken_Data;
  using DataAsArrayElement = Data;
  static constexpr MojomTypeCategory category = MojomTypeCategory::kUnion;
};

template <>
struct MojomTypeTraits<::blink::mojom::WorkerTokenDataView> {
  using Data = ::blink::mojom::internal::WorkerToken_Data;
  using DataAsArrayElement = Data;
  static constexpr MojomTypeCategory category = MojomTypeCategory::kUnion;
};

template <>
struct MojomTypeTraits<::blink::mojom::WorkletTokenDataView> {
  using Data = ::blink::mojom::internal::WorkletToken_Data;
  using DataAsArrayElement = Data;
  static constexpr MojomTypeCategory category = MojomTypeCategory::kUnion;
};

template <>
struct MojomTypeTraits<::blink::mojom::ExecutionContextTokenDataView> {
  using Data = ::blink::mojom::internal::ExecutionContextToken_Data;
  using DataAsArrayElement = Data;
  static constexpr MojomTypeCategory category = MojomTypeCategory::kUnion;
};

template <>
struct MojomTypeTraits<::blink::mojom::WebGPUExecutionContextTokenDataView> {
  using Data = ::blink::mojom::internal::WebGPUExecutionContextToken_Data;
  using DataAsArrayElement = Data;
  static constexpr MojomTypeCategory category = MojomTypeCategory::kUnion;
};

}  // namespace internal
}  // namespace mojo


namespace blink::mojom {


class DocumentTokenDataView {
 public:
  DocumentTokenDataView() = default;

  DocumentTokenDataView(
      internal::DocumentToken_Data* data,
      mojo::Message* message)
      : data_(data), message_(message) {}

  bool is_null() const { return !data_; }
  inline void GetValueDataView(
      ::mojo_base::mojom::UnguessableTokenDataView* output);

  template <typename UserType>
  [[nodiscard]] bool ReadValue(UserType* output) {
    
    auto* pointer = data_->value.Get();
    return mojo::internal::Deserialize<::mojo_base::mojom::UnguessableTokenDataView>(
        pointer, output, message_);
  }
 private:
  internal::DocumentToken_Data* data_ = nullptr;
  mojo::Message* message_ = nullptr;
};


class LocalFrameTokenDataView {
 public:
  LocalFrameTokenDataView() = default;

  LocalFrameTokenDataView(
      internal::LocalFrameToken_Data* data,
      mojo::Message* message)
      : data_(data), message_(message) {}

  bool is_null() const { return !data_; }
  inline void GetValueDataView(
      ::mojo_base::mojom::UnguessableTokenDataView* output);

  template <typename UserType>
  [[nodiscard]] bool ReadValue(UserType* output) {
    
    auto* pointer = data_->value.Get();
    return mojo::internal::Deserialize<::mojo_base::mojom::UnguessableTokenDataView>(
        pointer, output, message_);
  }
 private:
  internal::LocalFrameToken_Data* data_ = nullptr;
  mojo::Message* message_ = nullptr;
};


class RemoteFrameTokenDataView {
 public:
  RemoteFrameTokenDataView() = default;

  RemoteFrameTokenDataView(
      internal::RemoteFrameToken_Data* data,
      mojo::Message* message)
      : data_(data), message_(message) {}

  bool is_null() const { return !data_; }
  inline void GetValueDataView(
      ::mojo_base::mojom::UnguessableTokenDataView* output);

  template <typename UserType>
  [[nodiscard]] bool ReadValue(UserType* output) {
    
    auto* pointer = data_->value.Get();
    return mojo::internal::Deserialize<::mojo_base::mojom::UnguessableTokenDataView>(
        pointer, output, message_);
  }
 private:
  internal::RemoteFrameToken_Data* data_ = nullptr;
  mojo::Message* message_ = nullptr;
};


class DedicatedWorkerTokenDataView {
 public:
  DedicatedWorkerTokenDataView() = default;

  DedicatedWorkerTokenDataView(
      internal::DedicatedWorkerToken_Data* data,
      mojo::Message* message)
      : data_(data), message_(message) {}

  bool is_null() const { return !data_; }
  inline void GetValueDataView(
      ::mojo_base::mojom::UnguessableTokenDataView* output);

  template <typename UserType>
  [[nodiscard]] bool ReadValue(UserType* output) {
    
    auto* pointer = data_->value.Get();
    return mojo::internal::Deserialize<::mojo_base::mojom::UnguessableTokenDataView>(
        pointer, output, message_);
  }
 private:
  internal::DedicatedWorkerToken_Data* data_ = nullptr;
  mojo::Message* message_ = nullptr;
};


class ServiceWorkerTokenDataView {
 public:
  ServiceWorkerTokenDataView() = default;

  ServiceWorkerTokenDataView(
      internal::ServiceWorkerToken_Data* data,
      mojo::Message* message)
      : data_(data), message_(message) {}

  bool is_null() const { return !data_; }
  inline void GetValueDataView(
      ::mojo_base::mojom::UnguessableTokenDataView* output);

  template <typename UserType>
  [[nodiscard]] bool ReadValue(UserType* output) {
    
    auto* pointer = data_->value.Get();
    return mojo::internal::Deserialize<::mojo_base::mojom::UnguessableTokenDataView>(
        pointer, output, message_);
  }
 private:
  internal::ServiceWorkerToken_Data* data_ = nullptr;
  mojo::Message* message_ = nullptr;
};


class SharedWorkerTokenDataView {
 public:
  SharedWorkerTokenDataView() = default;

  SharedWorkerTokenDataView(
      internal::SharedWorkerToken_Data* data,
      mojo::Message* message)
      : data_(data), message_(message) {}

  bool is_null() const { return !data_; }
  inline void GetValueDataView(
      ::mojo_base::mojom::UnguessableTokenDataView* output);

  template <typename UserType>
  [[nodiscard]] bool ReadValue(UserType* output) {
    
    auto* pointer = data_->value.Get();
    return mojo::internal::Deserialize<::mojo_base::mojom::UnguessableTokenDataView>(
        pointer, output, message_);
  }
 private:
  internal::SharedWorkerToken_Data* data_ = nullptr;
  mojo::Message* message_ = nullptr;
};


class AnimationWorkletTokenDataView {
 public:
  AnimationWorkletTokenDataView() = default;

  AnimationWorkletTokenDataView(
      internal::AnimationWorkletToken_Data* data,
      mojo::Message* message)
      : data_(data), message_(message) {}

  bool is_null() const { return !data_; }
  inline void GetValueDataView(
      ::mojo_base::mojom::UnguessableTokenDataView* output);

  template <typename UserType>
  [[nodiscard]] bool ReadValue(UserType* output) {
    
    auto* pointer = data_->value.Get();
    return mojo::internal::Deserialize<::mojo_base::mojom::UnguessableTokenDataView>(
        pointer, output, message_);
  }
 private:
  internal::AnimationWorkletToken_Data* data_ = nullptr;
  mojo::Message* message_ = nullptr;
};


class AudioWorkletTokenDataView {
 public:
  AudioWorkletTokenDataView() = default;

  AudioWorkletTokenDataView(
      internal::AudioWorkletToken_Data* data,
      mojo::Message* message)
      : data_(data), message_(message) {}

  bool is_null() const { return !data_; }
  inline void GetValueDataView(
      ::mojo_base::mojom::UnguessableTokenDataView* output);

  template <typename UserType>
  [[nodiscard]] bool ReadValue(UserType* output) {
    
    auto* pointer = data_->value.Get();
    return mojo::internal::Deserialize<::mojo_base::mojom::UnguessableTokenDataView>(
        pointer, output, message_);
  }
 private:
  internal::AudioWorkletToken_Data* data_ = nullptr;
  mojo::Message* message_ = nullptr;
};


class LayoutWorkletTokenDataView {
 public:
  LayoutWorkletTokenDataView() = default;

  LayoutWorkletTokenDataView(
      internal::LayoutWorkletToken_Data* data,
      mojo::Message* message)
      : data_(data), message_(message) {}

  bool is_null() const { return !data_; }
  inline void GetValueDataView(
      ::mojo_base::mojom::UnguessableTokenDataView* output);

  template <typename UserType>
  [[nodiscard]] bool ReadValue(UserType* output) {
    
    auto* pointer = data_->value.Get();
    return mojo::internal::Deserialize<::mojo_base::mojom::UnguessableTokenDataView>(
        pointer, output, message_);
  }
 private:
  internal::LayoutWorkletToken_Data* data_ = nullptr;
  mojo::Message* message_ = nullptr;
};


class PaintWorkletTokenDataView {
 public:
  PaintWorkletTokenDataView() = default;

  PaintWorkletTokenDataView(
      internal::PaintWorkletToken_Data* data,
      mojo::Message* message)
      : data_(data), message_(message) {}

  bool is_null() const { return !data_; }
  inline void GetValueDataView(
      ::mojo_base::mojom::UnguessableTokenDataView* output);

  template <typename UserType>
  [[nodiscard]] bool ReadValue(UserType* output) {
    
    auto* pointer = data_->value.Get();
    return mojo::internal::Deserialize<::mojo_base::mojom::UnguessableTokenDataView>(
        pointer, output, message_);
  }
 private:
  internal::PaintWorkletToken_Data* data_ = nullptr;
  mojo::Message* message_ = nullptr;
};


class SharedStorageWorkletTokenDataView {
 public:
  SharedStorageWorkletTokenDataView() = default;

  SharedStorageWorkletTokenDataView(
      internal::SharedStorageWorkletToken_Data* data,
      mojo::Message* message)
      : data_(data), message_(message) {}

  bool is_null() const { return !data_; }
  inline void GetValueDataView(
      ::mojo_base::mojom::UnguessableTokenDataView* output);

  template <typename UserType>
  [[nodiscard]] bool ReadValue(UserType* output) {
    
    auto* pointer = data_->value.Get();
    return mojo::internal::Deserialize<::mojo_base::mojom::UnguessableTokenDataView>(
        pointer, output, message_);
  }
 private:
  internal::SharedStorageWorkletToken_Data* data_ = nullptr;
  mojo::Message* message_ = nullptr;
};


class ShadowRealmTokenDataView {
 public:
  ShadowRealmTokenDataView() = default;

  ShadowRealmTokenDataView(
      internal::ShadowRealmToken_Data* data,
      mojo::Message* message)
      : data_(data), message_(message) {}

  bool is_null() const { return !data_; }
  inline void GetValueDataView(
      ::mojo_base::mojom::UnguessableTokenDataView* output);

  template <typename UserType>
  [[nodiscard]] bool ReadValue(UserType* output) {
    
    auto* pointer = data_->value.Get();
    return mojo::internal::Deserialize<::mojo_base::mojom::UnguessableTokenDataView>(
        pointer, output, message_);
  }
 private:
  internal::ShadowRealmToken_Data* data_ = nullptr;
  mojo::Message* message_ = nullptr;
};


class SameDocNavigationScreenshotDestinationTokenDataView {
 public:
  SameDocNavigationScreenshotDestinationTokenDataView() = default;

  SameDocNavigationScreenshotDestinationTokenDataView(
      internal::SameDocNavigationScreenshotDestinationToken_Data* data,
      mojo::Message* message)
      : data_(data), message_(message) {}

  bool is_null() const { return !data_; }
  inline void GetValueDataView(
      ::mojo_base::mojom::UnguessableTokenDataView* output);

  template <typename UserType>
  [[nodiscard]] bool ReadValue(UserType* output) {
    
    auto* pointer = data_->value.Get();
    return mojo::internal::Deserialize<::mojo_base::mojom::UnguessableTokenDataView>(
        pointer, output, message_);
  }
 private:
  internal::SameDocNavigationScreenshotDestinationToken_Data* data_ = nullptr;
  mojo::Message* message_ = nullptr;
};


class V8ContextTokenDataView {
 public:
  V8ContextTokenDataView() = default;

  V8ContextTokenDataView(
      internal::V8ContextToken_Data* data,
      mojo::Message* message)
      : data_(data), message_(message) {}

  bool is_null() const { return !data_; }
  inline void GetValueDataView(
      ::mojo_base::mojom::UnguessableTokenDataView* output);

  template <typename UserType>
  [[nodiscard]] bool ReadValue(UserType* output) {
    
    auto* pointer = data_->value.Get();
    return mojo::internal::Deserialize<::mojo_base::mojom::UnguessableTokenDataView>(
        pointer, output, message_);
  }
 private:
  internal::V8ContextToken_Data* data_ = nullptr;
  mojo::Message* message_ = nullptr;
};


class ViewTransitionTokenDataView {
 public:
  ViewTransitionTokenDataView() = default;

  ViewTransitionTokenDataView(
      internal::ViewTransitionToken_Data* data,
      mojo::Message* message)
      : data_(data), message_(message) {}

  bool is_null() const { return !data_; }
  inline void GetValueDataView(
      ::mojo_base::mojom::UnguessableTokenDataView* output);

  template <typename UserType>
  [[nodiscard]] bool ReadValue(UserType* output) {
    
    auto* pointer = data_->value.Get();
    return mojo::internal::Deserialize<::mojo_base::mojom::UnguessableTokenDataView>(
        pointer, output, message_);
  }
 private:
  internal::ViewTransitionToken_Data* data_ = nullptr;
  mojo::Message* message_ = nullptr;
};


class WebNNContextTokenDataView {
 public:
  WebNNContextTokenDataView() = default;

  WebNNContextTokenDataView(
      internal::WebNNContextToken_Data* data,
      mojo::Message* message)
      : data_(data), message_(message) {}

  bool is_null() const { return !data_; }
  inline void GetValueDataView(
      ::mojo_base::mojom::UnguessableTokenDataView* output);

  template <typename UserType>
  [[nodiscard]] bool ReadValue(UserType* output) {
    
    auto* pointer = data_->value.Get();
    return mojo::internal::Deserialize<::mojo_base::mojom::UnguessableTokenDataView>(
        pointer, output, message_);
  }
 private:
  internal::WebNNContextToken_Data* data_ = nullptr;
  mojo::Message* message_ = nullptr;
};


class WebNNPendingConstantTokenDataView {
 public:
  WebNNPendingConstantTokenDataView() = default;

  WebNNPendingConstantTokenDataView(
      internal::WebNNPendingConstantToken_Data* data,
      mojo::Message* message)
      : data_(data), message_(message) {}

  bool is_null() const { return !data_; }
  inline void GetValueDataView(
      ::mojo_base::mojom::UnguessableTokenDataView* output);

  template <typename UserType>
  [[nodiscard]] bool ReadValue(UserType* output) {
    
    auto* pointer = data_->value.Get();
    return mojo::internal::Deserialize<::mojo_base::mojom::UnguessableTokenDataView>(
        pointer, output, message_);
  }
 private:
  internal::WebNNPendingConstantToken_Data* data_ = nullptr;
  mojo::Message* message_ = nullptr;
};


class WebNNTensorTokenDataView {
 public:
  WebNNTensorTokenDataView() = default;

  WebNNTensorTokenDataView(
      internal::WebNNTensorToken_Data* data,
      mojo::Message* message)
      : data_(data), message_(message) {}

  bool is_null() const { return !data_; }
  inline void GetValueDataView(
      ::mojo_base::mojom::UnguessableTokenDataView* output);

  template <typename UserType>
  [[nodiscard]] bool ReadValue(UserType* output) {
    
    auto* pointer = data_->value.Get();
    return mojo::internal::Deserialize<::mojo_base::mojom::UnguessableTokenDataView>(
        pointer, output, message_);
  }
 private:
  internal::WebNNTensorToken_Data* data_ = nullptr;
  mojo::Message* message_ = nullptr;
};


class WebNNGraphTokenDataView {
 public:
  WebNNGraphTokenDataView() = default;

  WebNNGraphTokenDataView(
      internal::WebNNGraphToken_Data* data,
      mojo::Message* message)
      : data_(data), message_(message) {}

  bool is_null() const { return !data_; }
  inline void GetValueDataView(
      ::mojo_base::mojom::UnguessableTokenDataView* output);

  template <typename UserType>
  [[nodiscard]] bool ReadValue(UserType* output) {
    
    auto* pointer = data_->value.Get();
    return mojo::internal::Deserialize<::mojo_base::mojom::UnguessableTokenDataView>(
        pointer, output, message_);
  }
 private:
  internal::WebNNGraphToken_Data* data_ = nullptr;
  mojo::Message* message_ = nullptr;
};


class FrameTokenDataView {
 public:
  using Tag = internal::FrameToken_Data::FrameToken_Tag;

  FrameTokenDataView() = default;

  FrameTokenDataView(
      internal::FrameToken_Data* data,
      mojo::Message* message)
      : data_(data), message_(message) {}

  bool is_null() const {
    // For inlined unions, |data_| is always non-null. In that case we need to
    // check |data_->is_null()|.
    return !data_ || data_->is_null();
  }

  Tag tag() const { return data_->tag; }
  bool is_local_frame_token() const { return data_->tag == Tag::kLocalFrameToken; }
  inline void GetLocalFrameTokenDataView(
      LocalFrameTokenDataView* output) const;

  template <typename UserType>
  [[nodiscard]] bool ReadLocalFrameToken(UserType* output) const {
    
    CHECK(is_local_frame_token());
    return mojo::internal::Deserialize<::blink::mojom::LocalFrameTokenDataView>(
        data_->data.f_local_frame_token.Get(), output, message_);
  }
  bool is_remote_frame_token() const { return data_->tag == Tag::kRemoteFrameToken; }
  inline void GetRemoteFrameTokenDataView(
      RemoteFrameTokenDataView* output) const;

  template <typename UserType>
  [[nodiscard]] bool ReadRemoteFrameToken(UserType* output) const {
    
    CHECK(is_remote_frame_token());
    return mojo::internal::Deserialize<::blink::mojom::RemoteFrameTokenDataView>(
        data_->data.f_remote_frame_token.Get(), output, message_);
  }

 private:
  internal::FrameToken_Data* data_ = nullptr;
  mojo::Message* message_ = nullptr;
};



class WorkerTokenDataView {
 public:
  using Tag = internal::WorkerToken_Data::WorkerToken_Tag;

  WorkerTokenDataView() = default;

  WorkerTokenDataView(
      internal::WorkerToken_Data* data,
      mojo::Message* message)
      : data_(data), message_(message) {}

  bool is_null() const {
    // For inlined unions, |data_| is always non-null. In that case we need to
    // check |data_->is_null()|.
    return !data_ || data_->is_null();
  }

  Tag tag() const { return data_->tag; }
  bool is_dedicated_worker_token() const { return data_->tag == Tag::kDedicatedWorkerToken; }
  inline void GetDedicatedWorkerTokenDataView(
      DedicatedWorkerTokenDataView* output) const;

  template <typename UserType>
  [[nodiscard]] bool ReadDedicatedWorkerToken(UserType* output) const {
    
    CHECK(is_dedicated_worker_token());
    return mojo::internal::Deserialize<::blink::mojom::DedicatedWorkerTokenDataView>(
        data_->data.f_dedicated_worker_token.Get(), output, message_);
  }
  bool is_service_worker_token() const { return data_->tag == Tag::kServiceWorkerToken; }
  inline void GetServiceWorkerTokenDataView(
      ServiceWorkerTokenDataView* output) const;

  template <typename UserType>
  [[nodiscard]] bool ReadServiceWorkerToken(UserType* output) const {
    
    CHECK(is_service_worker_token());
    return mojo::internal::Deserialize<::blink::mojom::ServiceWorkerTokenDataView>(
        data_->data.f_service_worker_token.Get(), output, message_);
  }
  bool is_shared_worker_token() const { return data_->tag == Tag::kSharedWorkerToken; }
  inline void GetSharedWorkerTokenDataView(
      SharedWorkerTokenDataView* output) const;

  template <typename UserType>
  [[nodiscard]] bool ReadSharedWorkerToken(UserType* output) const {
    
    CHECK(is_shared_worker_token());
    return mojo::internal::Deserialize<::blink::mojom::SharedWorkerTokenDataView>(
        data_->data.f_shared_worker_token.Get(), output, message_);
  }

 private:
  internal::WorkerToken_Data* data_ = nullptr;
  mojo::Message* message_ = nullptr;
};



class WorkletTokenDataView {
 public:
  using Tag = internal::WorkletToken_Data::WorkletToken_Tag;

  WorkletTokenDataView() = default;

  WorkletTokenDataView(
      internal::WorkletToken_Data* data,
      mojo::Message* message)
      : data_(data), message_(message) {}

  bool is_null() const {
    // For inlined unions, |data_| is always non-null. In that case we need to
    // check |data_->is_null()|.
    return !data_ || data_->is_null();
  }

  Tag tag() const { return data_->tag; }
  bool is_animation_worklet_token() const { return data_->tag == Tag::kAnimationWorkletToken; }
  inline void GetAnimationWorkletTokenDataView(
      AnimationWorkletTokenDataView* output) const;

  template <typename UserType>
  [[nodiscard]] bool ReadAnimationWorkletToken(UserType* output) const {
    
    CHECK(is_animation_worklet_token());
    return mojo::internal::Deserialize<::blink::mojom::AnimationWorkletTokenDataView>(
        data_->data.f_animation_worklet_token.Get(), output, message_);
  }
  bool is_audio_worklet_token() const { return data_->tag == Tag::kAudioWorkletToken; }
  inline void GetAudioWorkletTokenDataView(
      AudioWorkletTokenDataView* output) const;

  template <typename UserType>
  [[nodiscard]] bool ReadAudioWorkletToken(UserType* output) const {
    
    CHECK(is_audio_worklet_token());
    return mojo::internal::Deserialize<::blink::mojom::AudioWorkletTokenDataView>(
        data_->data.f_audio_worklet_token.Get(), output, message_);
  }
  bool is_layout_worklet_token() const { return data_->tag == Tag::kLayoutWorkletToken; }
  inline void GetLayoutWorkletTokenDataView(
      LayoutWorkletTokenDataView* output) const;

  template <typename UserType>
  [[nodiscard]] bool ReadLayoutWorkletToken(UserType* output) const {
    
    CHECK(is_layout_worklet_token());
    return mojo::internal::Deserialize<::blink::mojom::LayoutWorkletTokenDataView>(
        data_->data.f_layout_worklet_token.Get(), output, message_);
  }
  bool is_paint_worklet_token() const { return data_->tag == Tag::kPaintWorkletToken; }
  inline void GetPaintWorkletTokenDataView(
      PaintWorkletTokenDataView* output) const;

  template <typename UserType>
  [[nodiscard]] bool ReadPaintWorkletToken(UserType* output) const {
    
    CHECK(is_paint_worklet_token());
    return mojo::internal::Deserialize<::blink::mojom::PaintWorkletTokenDataView>(
        data_->data.f_paint_worklet_token.Get(), output, message_);
  }
  bool is_shared_storage_worklet_token() const { return data_->tag == Tag::kSharedStorageWorkletToken; }
  inline void GetSharedStorageWorkletTokenDataView(
      SharedStorageWorkletTokenDataView* output) const;

  template <typename UserType>
  [[nodiscard]] bool ReadSharedStorageWorkletToken(UserType* output) const {
    
    CHECK(is_shared_storage_worklet_token());
    return mojo::internal::Deserialize<::blink::mojom::SharedStorageWorkletTokenDataView>(
        data_->data.f_shared_storage_worklet_token.Get(), output, message_);
  }

 private:
  internal::WorkletToken_Data* data_ = nullptr;
  mojo::Message* message_ = nullptr;
};



class ExecutionContextTokenDataView {
 public:
  using Tag = internal::ExecutionContextToken_Data::ExecutionContextToken_Tag;

  ExecutionContextTokenDataView() = default;

  ExecutionContextTokenDataView(
      internal::ExecutionContextToken_Data* data,
      mojo::Message* message)
      : data_(data), message_(message) {}

  bool is_null() const {
    // For inlined unions, |data_| is always non-null. In that case we need to
    // check |data_->is_null()|.
    return !data_ || data_->is_null();
  }

  Tag tag() const { return data_->tag; }
  bool is_local_frame_token() const { return data_->tag == Tag::kLocalFrameToken; }
  inline void GetLocalFrameTokenDataView(
      LocalFrameTokenDataView* output) const;

  template <typename UserType>
  [[nodiscard]] bool ReadLocalFrameToken(UserType* output) const {
    
    CHECK(is_local_frame_token());
    return mojo::internal::Deserialize<::blink::mojom::LocalFrameTokenDataView>(
        data_->data.f_local_frame_token.Get(), output, message_);
  }
  bool is_dedicated_worker_token() const { return data_->tag == Tag::kDedicatedWorkerToken; }
  inline void GetDedicatedWorkerTokenDataView(
      DedicatedWorkerTokenDataView* output) const;

  template <typename UserType>
  [[nodiscard]] bool ReadDedicatedWorkerToken(UserType* output) const {
    
    CHECK(is_dedicated_worker_token());
    return mojo::internal::Deserialize<::blink::mojom::DedicatedWorkerTokenDataView>(
        data_->data.f_dedicated_worker_token.Get(), output, message_);
  }
  bool is_service_worker_token() const { return data_->tag == Tag::kServiceWorkerToken; }
  inline void GetServiceWorkerTokenDataView(
      ServiceWorkerTokenDataView* output) const;

  template <typename UserType>
  [[nodiscard]] bool ReadServiceWorkerToken(UserType* output) const {
    
    CHECK(is_service_worker_token());
    return mojo::internal::Deserialize<::blink::mojom::ServiceWorkerTokenDataView>(
        data_->data.f_service_worker_token.Get(), output, message_);
  }
  bool is_shared_worker_token() const { return data_->tag == Tag::kSharedWorkerToken; }
  inline void GetSharedWorkerTokenDataView(
      SharedWorkerTokenDataView* output) const;

  template <typename UserType>
  [[nodiscard]] bool ReadSharedWorkerToken(UserType* output) const {
    
    CHECK(is_shared_worker_token());
    return mojo::internal::Deserialize<::blink::mojom::SharedWorkerTokenDataView>(
        data_->data.f_shared_worker_token.Get(), output, message_);
  }
  bool is_animation_worklet_token() const { return data_->tag == Tag::kAnimationWorkletToken; }
  inline void GetAnimationWorkletTokenDataView(
      AnimationWorkletTokenDataView* output) const;

  template <typename UserType>
  [[nodiscard]] bool ReadAnimationWorkletToken(UserType* output) const {
    
    CHECK(is_animation_worklet_token());
    return mojo::internal::Deserialize<::blink::mojom::AnimationWorkletTokenDataView>(
        data_->data.f_animation_worklet_token.Get(), output, message_);
  }
  bool is_audio_worklet_token() const { return data_->tag == Tag::kAudioWorkletToken; }
  inline void GetAudioWorkletTokenDataView(
      AudioWorkletTokenDataView* output) const;

  template <typename UserType>
  [[nodiscard]] bool ReadAudioWorkletToken(UserType* output) const {
    
    CHECK(is_audio_worklet_token());
    return mojo::internal::Deserialize<::blink::mojom::AudioWorkletTokenDataView>(
        data_->data.f_audio_worklet_token.Get(), output, message_);
  }
  bool is_layout_worklet_token() const { return data_->tag == Tag::kLayoutWorkletToken; }
  inline void GetLayoutWorkletTokenDataView(
      LayoutWorkletTokenDataView* output) const;

  template <typename UserType>
  [[nodiscard]] bool ReadLayoutWorkletToken(UserType* output) const {
    
    CHECK(is_layout_worklet_token());
    return mojo::internal::Deserialize<::blink::mojom::LayoutWorkletTokenDataView>(
        data_->data.f_layout_worklet_token.Get(), output, message_);
  }
  bool is_paint_worklet_token() const { return data_->tag == Tag::kPaintWorkletToken; }
  inline void GetPaintWorkletTokenDataView(
      PaintWorkletTokenDataView* output) const;

  template <typename UserType>
  [[nodiscard]] bool ReadPaintWorkletToken(UserType* output) const {
    
    CHECK(is_paint_worklet_token());
    return mojo::internal::Deserialize<::blink::mojom::PaintWorkletTokenDataView>(
        data_->data.f_paint_worklet_token.Get(), output, message_);
  }
  bool is_shared_storage_worklet_token() const { return data_->tag == Tag::kSharedStorageWorkletToken; }
  inline void GetSharedStorageWorkletTokenDataView(
      SharedStorageWorkletTokenDataView* output) const;

  template <typename UserType>
  [[nodiscard]] bool ReadSharedStorageWorkletToken(UserType* output) const {
    
    CHECK(is_shared_storage_worklet_token());
    return mojo::internal::Deserialize<::blink::mojom::SharedStorageWorkletTokenDataView>(
        data_->data.f_shared_storage_worklet_token.Get(), output, message_);
  }
  bool is_shadow_realm_token() const { return data_->tag == Tag::kShadowRealmToken; }
  inline void GetShadowRealmTokenDataView(
      ShadowRealmTokenDataView* output) const;

  template <typename UserType>
  [[nodiscard]] bool ReadShadowRealmToken(UserType* output) const {
    
    CHECK(is_shadow_realm_token());
    return mojo::internal::Deserialize<::blink::mojom::ShadowRealmTokenDataView>(
        data_->data.f_shadow_realm_token.Get(), output, message_);
  }

 private:
  internal::ExecutionContextToken_Data* data_ = nullptr;
  mojo::Message* message_ = nullptr;
};



class WebGPUExecutionContextTokenDataView {
 public:
  using Tag = internal::WebGPUExecutionContextToken_Data::WebGPUExecutionContextToken_Tag;

  WebGPUExecutionContextTokenDataView() = default;

  WebGPUExecutionContextTokenDataView(
      internal::WebGPUExecutionContextToken_Data* data,
      mojo::Message* message)
      : data_(data), message_(message) {}

  bool is_null() const {
    // For inlined unions, |data_| is always non-null. In that case we need to
    // check |data_->is_null()|.
    return !data_ || data_->is_null();
  }

  Tag tag() const { return data_->tag; }
  bool is_document_token() const { return data_->tag == Tag::kDocumentToken; }
  inline void GetDocumentTokenDataView(
      DocumentTokenDataView* output) const;

  template <typename UserType>
  [[nodiscard]] bool ReadDocumentToken(UserType* output) const {
    
    CHECK(is_document_token());
    return mojo::internal::Deserialize<::blink::mojom::DocumentTokenDataView>(
        data_->data.f_document_token.Get(), output, message_);
  }
  bool is_dedicated_worker_token() const { return data_->tag == Tag::kDedicatedWorkerToken; }
  inline void GetDedicatedWorkerTokenDataView(
      DedicatedWorkerTokenDataView* output) const;

  template <typename UserType>
  [[nodiscard]] bool ReadDedicatedWorkerToken(UserType* output) const {
    
    CHECK(is_dedicated_worker_token());
    return mojo::internal::Deserialize<::blink::mojom::DedicatedWorkerTokenDataView>(
        data_->data.f_dedicated_worker_token.Get(), output, message_);
  }
  bool is_shared_worker_token() const { return data_->tag == Tag::kSharedWorkerToken; }
  inline void GetSharedWorkerTokenDataView(
      SharedWorkerTokenDataView* output) const;

  template <typename UserType>
  [[nodiscard]] bool ReadSharedWorkerToken(UserType* output) const {
    
    CHECK(is_shared_worker_token());
    return mojo::internal::Deserialize<::blink::mojom::SharedWorkerTokenDataView>(
        data_->data.f_shared_worker_token.Get(), output, message_);
  }
  bool is_service_worker_token() const { return data_->tag == Tag::kServiceWorkerToken; }
  inline void GetServiceWorkerTokenDataView(
      ServiceWorkerTokenDataView* output) const;

  template <typename UserType>
  [[nodiscard]] bool ReadServiceWorkerToken(UserType* output) const {
    
    CHECK(is_service_worker_token());
    return mojo::internal::Deserialize<::blink::mojom::ServiceWorkerTokenDataView>(
        data_->data.f_service_worker_token.Get(), output, message_);
  }

 private:
  internal::WebGPUExecutionContextToken_Data* data_ = nullptr;
  mojo::Message* message_ = nullptr;
};



}  // blink::mojom

#endif  // THIRD_PARTY_BLINK_PUBLIC_MOJOM_TOKENS_TOKENS_MOJOM_DATA_VIEW_H_