// content/browser/xr/webxr_internals/mojom/webxr_internals.mojom-send-validation.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.

#ifndef CONTENT_BROWSER_XR_WEBXR_INTERNALS_MOJOM_WEBXR_INTERNALS_MOJOM_SEND_VALIDATION_H_
#define CONTENT_BROWSER_XR_WEBXR_INTERNALS_MOJOM_WEBXR_INTERNALS_MOJOM_SEND_VALIDATION_H_

#include "content/browser/xr/webxr_internals/mojom/webxr_internals.mojom-shared-internal.h"
#include "device/vr/public/mojom/xr_device.mojom-shared.h"
#include "device/vr/public/mojom/xr_session.mojom-shared.h"
#include "mojo/public/mojom/base/time.mojom-shared.h"

#include "content/browser/xr/webxr_internals/mojom/webxr_internals.mojom-data-view.h"

#include "mojo/public/cpp/bindings/lib/send_validation_type.h"
#include "mojo/public/cpp/bindings/lib/send_validation.h"
#include "mojo/public/cpp/bindings/lib/interface_serialization_send_validation.h"

namespace mojo::internal {

template <typename MaybeConstUserType, mojo::internal::SendValidation send_validation>
struct SendValidationSerializer<::webxr::mojom::DeviceInfoDataView, MaybeConstUserType, send_validation> {
  using UserType = typename std::remove_const<MaybeConstUserType>::type;
  using Traits = StructTraits<::webxr::mojom::DeviceInfoDataView, UserType>;
  static void Serialize(
      MaybeConstUserType& input,
      mojo::internal::MessageFragment<::webxr::mojom::internal::DeviceInfo_Data>& fragment) {
    if (CallIsNullIfExists<Traits>(input))
      return;
    fragment.Allocate();

      decltype(Traits::operating_system_name(input)) in_operating_system_name = Traits::operating_system_name(input);
      mojo::internal::MessageFragment<
          typename decltype(fragment->operating_system_name)::BaseType> operating_system_name_fragment(
              fragment.message());
      
      mojo::internal::Serialize<mojo::StringDataView, send_validation>(
        in_operating_system_name,
        operating_system_name_fragment);

      fragment->operating_system_name.Set(
          operating_system_name_fragment.is_null() ? nullptr : operating_system_name_fragment.data());

      
      MOJO_INTERNAL_CHECK_SERIALIZATION(
        send_validation,
        !(fragment->operating_system_name.is_null()),
        mojo::internal::VALIDATION_ERROR_UNEXPECTED_NULL_POINTER,
        "null operating_system_name in DeviceInfo struct");

      decltype(Traits::operating_system_version(input)) in_operating_system_version = Traits::operating_system_version(input);
      mojo::internal::MessageFragment<
          typename decltype(fragment->operating_system_version)::BaseType> operating_system_version_fragment(
              fragment.message());
      
      mojo::internal::Serialize<mojo::StringDataView, send_validation>(
        in_operating_system_version,
        operating_system_version_fragment);

      fragment->operating_system_version.Set(
          operating_system_version_fragment.is_null() ? nullptr : operating_system_version_fragment.data());

      
      MOJO_INTERNAL_CHECK_SERIALIZATION(
        send_validation,
        !(fragment->operating_system_version.is_null()),
        mojo::internal::VALIDATION_ERROR_UNEXPECTED_NULL_POINTER,
        "null operating_system_version in DeviceInfo struct");

      decltype(Traits::gpu_gl_vendor(input)) in_gpu_gl_vendor = Traits::gpu_gl_vendor(input);
      mojo::internal::MessageFragment<
          typename decltype(fragment->gpu_gl_vendor)::BaseType> gpu_gl_vendor_fragment(
              fragment.message());
      
      mojo::internal::Serialize<mojo::StringDataView, send_validation>(
        in_gpu_gl_vendor,
        gpu_gl_vendor_fragment);

      fragment->gpu_gl_vendor.Set(
          gpu_gl_vendor_fragment.is_null() ? nullptr : gpu_gl_vendor_fragment.data());

      
      MOJO_INTERNAL_CHECK_SERIALIZATION(
        send_validation,
        !(fragment->gpu_gl_vendor.is_null()),
        mojo::internal::VALIDATION_ERROR_UNEXPECTED_NULL_POINTER,
        "null gpu_gl_vendor in DeviceInfo struct");

      decltype(Traits::gpu_gl_renderer(input)) in_gpu_gl_renderer = Traits::gpu_gl_renderer(input);
      mojo::internal::MessageFragment<
          typename decltype(fragment->gpu_gl_renderer)::BaseType> gpu_gl_renderer_fragment(
              fragment.message());
      
      mojo::internal::Serialize<mojo::StringDataView, send_validation>(
        in_gpu_gl_renderer,
        gpu_gl_renderer_fragment);

      fragment->gpu_gl_renderer.Set(
          gpu_gl_renderer_fragment.is_null() ? nullptr : gpu_gl_renderer_fragment.data());

      
      MOJO_INTERNAL_CHECK_SERIALIZATION(
        send_validation,
        !(fragment->gpu_gl_renderer.is_null()),
        mojo::internal::VALIDATION_ERROR_UNEXPECTED_NULL_POINTER,
        "null gpu_gl_renderer in DeviceInfo struct");
  }
};

template <typename MaybeConstUserType, mojo::internal::SendValidation send_validation>
struct SendValidationSerializer<::webxr::mojom::SessionRequestedRecordDataView, MaybeConstUserType, send_validation> {
  using UserType = typename std::remove_const<MaybeConstUserType>::type;
  using Traits = StructTraits<::webxr::mojom::SessionRequestedRecordDataView, UserType>;
  static void Serialize(
      MaybeConstUserType& input,
      mojo::internal::MessageFragment<::webxr::mojom::internal::SessionRequestedRecord_Data>& fragment) {
    if (CallIsNullIfExists<Traits>(input))
      return;
    fragment.Allocate();

      decltype(Traits::options(input)) in_options = Traits::options(input);
      mojo::internal::MessageFragment<
          typename decltype(fragment->options)::BaseType> options_fragment(
              fragment.message());
      
      mojo::internal::Serialize<::device::mojom::XRSessionOptionsDataView, send_validation>(
        in_options,
        options_fragment);

      fragment->options.Set(
          options_fragment.is_null() ? nullptr : options_fragment.data());

      
      MOJO_INTERNAL_CHECK_SERIALIZATION(
        send_validation,
        !(fragment->options.is_null()),
        mojo::internal::VALIDATION_ERROR_UNEXPECTED_NULL_POINTER,
        "null options in SessionRequestedRecord struct");

      decltype(Traits::requested_time(input)) in_requested_time = Traits::requested_time(input);
      mojo::internal::MessageFragment<
          typename decltype(fragment->requested_time)::BaseType> requested_time_fragment(
              fragment.message());
      
      mojo::internal::Serialize<::mojo_base::mojom::TimeDataView, send_validation>(
        in_requested_time,
        requested_time_fragment);

      fragment->requested_time.Set(
          requested_time_fragment.is_null() ? nullptr : requested_time_fragment.data());

      
      MOJO_INTERNAL_CHECK_SERIALIZATION(
        send_validation,
        !(fragment->requested_time.is_null()),
        mojo::internal::VALIDATION_ERROR_UNEXPECTED_NULL_POINTER,
        "null requested_time in SessionRequestedRecord struct");
  }
};

template <typename MaybeConstUserType, mojo::internal::SendValidation send_validation>
struct SendValidationSerializer<::webxr::mojom::SessionRejectedRecordDataView, MaybeConstUserType, send_validation> {
  using UserType = typename std::remove_const<MaybeConstUserType>::type;
  using Traits = StructTraits<::webxr::mojom::SessionRejectedRecordDataView, UserType>;
  static void Serialize(
      MaybeConstUserType& input,
      mojo::internal::MessageFragment<::webxr::mojom::internal::SessionRejectedRecord_Data>& fragment) {
    if (CallIsNullIfExists<Traits>(input))
      return;
    fragment.Allocate();

      fragment->trace_id = Traits::trace_id(input);

      
      mojo::internal::Serialize<::device::mojom::RequestSessionError>(
        Traits::failure_reason(input),
        &fragment->failure_reason);

      decltype(Traits::rejected_time(input)) in_rejected_time = Traits::rejected_time(input);
      mojo::internal::MessageFragment<
          typename decltype(fragment->rejected_time)::BaseType> rejected_time_fragment(
              fragment.message());
      
      mojo::internal::Serialize<::mojo_base::mojom::TimeDataView, send_validation>(
        in_rejected_time,
        rejected_time_fragment);

      fragment->rejected_time.Set(
          rejected_time_fragment.is_null() ? nullptr : rejected_time_fragment.data());

      
      MOJO_INTERNAL_CHECK_SERIALIZATION(
        send_validation,
        !(fragment->rejected_time.is_null()),
        mojo::internal::VALIDATION_ERROR_UNEXPECTED_NULL_POINTER,
        "null rejected_time in SessionRejectedRecord struct");

      decltype(Traits::failure_reason_description(input)) in_failure_reason_description = Traits::failure_reason_description(input);
      mojo::internal::MessageFragment<
          typename decltype(fragment->failure_reason_description)::BaseType> failure_reason_description_fragment(
              fragment.message());
      
      mojo::internal::Serialize<mojo::StringDataView, send_validation>(
        in_failure_reason_description,
        failure_reason_description_fragment);

      fragment->failure_reason_description.Set(
          failure_reason_description_fragment.is_null() ? nullptr : failure_reason_description_fragment.data());

      
      MOJO_INTERNAL_CHECK_SERIALIZATION(
        send_validation,
        !(fragment->failure_reason_description.is_null()),
        mojo::internal::VALIDATION_ERROR_UNEXPECTED_NULL_POINTER,
        "null failure_reason_description in SessionRejectedRecord struct");

      decltype(Traits::rejected_features(input)) in_rejected_features = Traits::rejected_features(input);
      mojo::internal::MessageFragment<
          typename decltype(fragment->rejected_features)::BaseType>
          rejected_features_fragment(fragment.message());
      constexpr const mojo::internal::ContainerValidateParams& rejected_features_validate_params =
          mojo::internal::GetArrayOfEnumsValidator<0, false, ::device::mojom::internal::XRSessionFeature_Data::Validate>();
      
      mojo::internal::Serialize<mojo::ArrayDataView<::device::mojom::XRSessionFeature>, send_validation>(
        in_rejected_features,
        rejected_features_fragment,
        &rejected_features_validate_params);

      fragment->rejected_features.Set(
          rejected_features_fragment.is_null() ? nullptr : rejected_features_fragment.data());

      
      MOJO_INTERNAL_CHECK_SERIALIZATION(
        send_validation,
        !(fragment->rejected_features.is_null()),
        mojo::internal::VALIDATION_ERROR_UNEXPECTED_NULL_POINTER,
        "null rejected_features in SessionRejectedRecord struct");
  }
};

template <typename MaybeConstUserType, mojo::internal::SendValidation send_validation>
struct SendValidationSerializer<::webxr::mojom::SessionStartedRecordDataView, MaybeConstUserType, send_validation> {
  using UserType = typename std::remove_const<MaybeConstUserType>::type;
  using Traits = StructTraits<::webxr::mojom::SessionStartedRecordDataView, UserType>;
  static void Serialize(
      MaybeConstUserType& input,
      mojo::internal::MessageFragment<::webxr::mojom::internal::SessionStartedRecord_Data>& fragment) {
    if (CallIsNullIfExists<Traits>(input))
      return;
    fragment.Allocate();

      fragment->trace_id = Traits::trace_id(input);

      
      mojo::internal::Serialize<::device::mojom::XRDeviceId>(
        Traits::device_id(input),
        &fragment->device_id);

      decltype(Traits::started_time(input)) in_started_time = Traits::started_time(input);
      mojo::internal::MessageFragment<
          typename decltype(fragment->started_time)::BaseType> started_time_fragment(
              fragment.message());
      
      mojo::internal::Serialize<::mojo_base::mojom::TimeDataView, send_validation>(
        in_started_time,
        started_time_fragment);

      fragment->started_time.Set(
          started_time_fragment.is_null() ? nullptr : started_time_fragment.data());

      
      MOJO_INTERNAL_CHECK_SERIALIZATION(
        send_validation,
        !(fragment->started_time.is_null()),
        mojo::internal::VALIDATION_ERROR_UNEXPECTED_NULL_POINTER,
        "null started_time in SessionStartedRecord struct");
  }
};

template <typename MaybeConstUserType, mojo::internal::SendValidation send_validation>
struct SendValidationSerializer<::webxr::mojom::SessionStoppedRecordDataView, MaybeConstUserType, send_validation> {
  using UserType = typename std::remove_const<MaybeConstUserType>::type;
  using Traits = StructTraits<::webxr::mojom::SessionStoppedRecordDataView, UserType>;
  static void Serialize(
      MaybeConstUserType& input,
      mojo::internal::MessageFragment<::webxr::mojom::internal::SessionStoppedRecord_Data>& fragment) {
    if (CallIsNullIfExists<Traits>(input))
      return;
    fragment.Allocate();

      fragment->trace_id = Traits::trace_id(input);

      decltype(Traits::stopped_time(input)) in_stopped_time = Traits::stopped_time(input);
      mojo::internal::MessageFragment<
          typename decltype(fragment->stopped_time)::BaseType> stopped_time_fragment(
              fragment.message());
      
      mojo::internal::Serialize<::mojo_base::mojom::TimeDataView, send_validation>(
        in_stopped_time,
        stopped_time_fragment);

      fragment->stopped_time.Set(
          stopped_time_fragment.is_null() ? nullptr : stopped_time_fragment.data());

      
      MOJO_INTERNAL_CHECK_SERIALIZATION(
        send_validation,
        !(fragment->stopped_time.is_null()),
        mojo::internal::VALIDATION_ERROR_UNEXPECTED_NULL_POINTER,
        "null stopped_time in SessionStoppedRecord struct");
  }
};

template <typename MaybeConstUserType, mojo::internal::SendValidation send_validation>
struct SendValidationSerializer<::webxr::mojom::RuntimeInfoDataView, MaybeConstUserType, send_validation> {
  using UserType = typename std::remove_const<MaybeConstUserType>::type;
  using Traits = StructTraits<::webxr::mojom::RuntimeInfoDataView, UserType>;
  static void Serialize(
      MaybeConstUserType& input,
      mojo::internal::MessageFragment<::webxr::mojom::internal::RuntimeInfo_Data>& fragment) {
    if (CallIsNullIfExists<Traits>(input))
      return;
    fragment.Allocate();

      
      mojo::internal::Serialize<::device::mojom::XRDeviceId>(
        Traits::device_id(input),
        &fragment->device_id);

      decltype(Traits::supported_features(input)) in_supported_features = Traits::supported_features(input);
      mojo::internal::MessageFragment<
          typename decltype(fragment->supported_features)::BaseType>
          supported_features_fragment(fragment.message());
      constexpr const mojo::internal::ContainerValidateParams& supported_features_validate_params =
          mojo::internal::GetArrayOfEnumsValidator<0, false, ::device::mojom::internal::XRSessionFeature_Data::Validate>();
      
      mojo::internal::Serialize<mojo::ArrayDataView<::device::mojom::XRSessionFeature>, send_validation>(
        in_supported_features,
        supported_features_fragment,
        &supported_features_validate_params);

      fragment->supported_features.Set(
          supported_features_fragment.is_null() ? nullptr : supported_features_fragment.data());

      
      MOJO_INTERNAL_CHECK_SERIALIZATION(
        send_validation,
        !(fragment->supported_features.is_null()),
        mojo::internal::VALIDATION_ERROR_UNEXPECTED_NULL_POINTER,
        "null supported_features in RuntimeInfo struct");

      fragment->is_ar_blend_mode_supported = Traits::is_ar_blend_mode_supported(input);
  }
};

}  // namespace mojo::internal

#endif  // CONTENT_BROWSER_XR_WEBXR_INTERNALS_MOJOM_WEBXR_INTERNALS_MOJOM_SEND_VALIDATION_H_