// components/optimization_guide/public/mojom/model_broker_debug.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 COMPONENTS_OPTIMIZATION_GUIDE_PUBLIC_MOJOM_MODEL_BROKER_DEBUG_MOJOM_SEND_VALIDATION_H_
#define COMPONENTS_OPTIMIZATION_GUIDE_PUBLIC_MOJOM_MODEL_BROKER_DEBUG_MOJOM_SEND_VALIDATION_H_

#include "components/optimization_guide/public/mojom/model_broker_debug.mojom-shared-internal.h"
#include "components/optimization_guide/public/mojom/model_broker.mojom-shared.h"
#include "mojo/public/mojom/base/proto_wrapper.mojom-shared.h"
#include "services/on_device_model/public/mojom/download_observer.mojom-shared.h"
#include "services/on_device_model/public/mojom/on_device_model.mojom-shared.h"

#include "components/optimization_guide/public/mojom/model_broker_debug.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"
#include "mojo/public/cpp/bindings/lib/has_send_validation_helper.h"

namespace mojo::internal {
template <typename MaybeConstUserType>
struct HasSendValidationSerialize<::optimization_guide::mojom::BrokerAssetState, MaybeConstUserType>
    : std::false_type {};

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

      decltype(Traits::description(input)) in_description = Traits::description(input);
      mojo::internal::MessageFragment<
          typename decltype(fragment->description)::BaseType> description_fragment(
              fragment.message());
      
      mojo::internal::Serialize<mojo::StringDataView, send_validation>(
        in_description,
        description_fragment);

      fragment->description.Set(
          description_fragment.is_null() ? nullptr : description_fragment.data());

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

      decltype(Traits::value(input)) in_value = Traits::value(input);
      mojo::internal::MessageFragment<
          typename decltype(fragment->value)::BaseType> value_fragment(
              fragment.message());
      
      mojo::internal::Serialize<mojo::StringDataView, send_validation>(
        in_value,
        value_fragment);

      fragment->value.Set(
          value_fragment.is_null() ? nullptr : value_fragment.data());

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

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

      decltype(Traits::name(input)) in_name = Traits::name(input);
      mojo::internal::MessageFragment<
          typename decltype(fragment->name)::BaseType> name_fragment(
              fragment.message());
      
      mojo::internal::Serialize<mojo::StringDataView, send_validation>(
        in_name,
        name_fragment);

      fragment->name.Set(
          name_fragment.is_null() ? nullptr : name_fragment.data());

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

      decltype(Traits::version(input)) in_version = Traits::version(input);
      mojo::internal::MessageFragment<
          typename decltype(fragment->version)::BaseType> version_fragment(
              fragment.message());
      
      mojo::internal::Serialize<mojo::StringDataView, send_validation>(
        in_version,
        version_fragment);

      fragment->version.Set(
          version_fragment.is_null() ? nullptr : version_fragment.data());

      
      mojo::internal::Serialize<::optimization_guide::mojom::BrokerAssetState>(
        Traits::state(input),
        &fragment->state);

      decltype(Traits::error(input)) in_error = Traits::error(input);
      mojo::internal::MessageFragment<
          typename decltype(fragment->error)::BaseType> error_fragment(
              fragment.message());
      
      mojo::internal::Serialize<mojo::StringDataView, send_validation>(
        in_error,
        error_fragment);

      fragment->error.Set(
          error_fragment.is_null() ? nullptr : error_fragment.data());

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

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

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

      decltype(Traits::name(input)) in_name = Traits::name(input);
      mojo::internal::MessageFragment<
          typename decltype(fragment->name)::BaseType> name_fragment(
              fragment.message());
      
      mojo::internal::Serialize<mojo::StringDataView, send_validation>(
        in_name,
        name_fragment);

      fragment->name.Set(
          name_fragment.is_null() ? nullptr : name_fragment.data());

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

      fragment->assets_requested = Traits::assets_requested(input);
      fragment->unavailable_reason_$flag = Traits::unavailable_reason(input).has_value();
      if (Traits::unavailable_reason(input).has_value()) {
        
        mojo::internal::Serialize<::optimization_guide::mojom::ModelUnavailableReason>(
          Traits::unavailable_reason(input).value(),
          &fragment->unavailable_reason_$value);
      } else {
        fragment->unavailable_reason_$value =
            static_cast<int32_t>(::optimization_guide::mojom::ModelUnavailableReason::kMinValue);
      }
  }
};

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

      decltype(Traits::name(input)) in_name = Traits::name(input);
      mojo::internal::MessageFragment<
          typename decltype(fragment->name)::BaseType> name_fragment(
              fragment.message());
      
      mojo::internal::Serialize<mojo::StringDataView, send_validation>(
        in_name,
        name_fragment);

      fragment->name.Set(
          name_fragment.is_null() ? nullptr : name_fragment.data());

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

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

      decltype(Traits::weights_path(input)) in_weights_path = Traits::weights_path(input);
      mojo::internal::MessageFragment<
          typename decltype(fragment->weights_path)::BaseType> weights_path_fragment(
              fragment.message());
      
      mojo::internal::Serialize<mojo::StringDataView, send_validation>(
        in_weights_path,
        weights_path_fragment);

      fragment->weights_path.Set(
          weights_path_fragment.is_null() ? nullptr : weights_path_fragment.data());

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

      decltype(Traits::backend_type(input)) in_backend_type = Traits::backend_type(input);
      mojo::internal::MessageFragment<
          typename decltype(fragment->backend_type)::BaseType> backend_type_fragment(
              fragment.message());
      
      mojo::internal::Serialize<mojo::StringDataView, send_validation>(
        in_backend_type,
        backend_type_fragment);

      fragment->backend_type.Set(
          backend_type_fragment.is_null() ? nullptr : backend_type_fragment.data());

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

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

      decltype(Traits::properties(input)) in_properties = Traits::properties(input);
      mojo::internal::MessageFragment<
          typename decltype(fragment->properties)::BaseType>
          properties_fragment(fragment.message());
      constexpr const mojo::internal::ContainerValidateParams& properties_validate_params =
          mojo::internal::GetArrayValidator<0, false, nullptr>();
      
      mojo::internal::Serialize<mojo::ArrayDataView<::optimization_guide::mojom::BrokerPropertyInfoDataView>, send_validation>(
        in_properties,
        properties_fragment,
        &properties_validate_params);

      fragment->properties.Set(
          properties_fragment.is_null() ? nullptr : properties_fragment.data());

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

      decltype(Traits::assets(input)) in_assets = Traits::assets(input);
      mojo::internal::MessageFragment<
          typename decltype(fragment->assets)::BaseType>
          assets_fragment(fragment.message());
      constexpr const mojo::internal::ContainerValidateParams& assets_validate_params =
          mojo::internal::GetArrayValidator<0, false, nullptr>();
      
      mojo::internal::Serialize<mojo::ArrayDataView<::optimization_guide::mojom::BrokerAssetInfoDataView>, send_validation>(
        in_assets,
        assets_fragment,
        &assets_validate_params);

      fragment->assets.Set(
          assets_fragment.is_null() ? nullptr : assets_fragment.data());

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

      decltype(Traits::use_cases(input)) in_use_cases = Traits::use_cases(input);
      mojo::internal::MessageFragment<
          typename decltype(fragment->use_cases)::BaseType>
          use_cases_fragment(fragment.message());
      constexpr const mojo::internal::ContainerValidateParams& use_cases_validate_params =
          mojo::internal::GetArrayValidator<0, false, nullptr>();
      
      mojo::internal::Serialize<mojo::ArrayDataView<::optimization_guide::mojom::BrokerUseCaseInfoDataView>, send_validation>(
        in_use_cases,
        use_cases_fragment,
        &use_cases_validate_params);

      fragment->use_cases.Set(
          use_cases_fragment.is_null() ? nullptr : use_cases_fragment.data());

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

      decltype(Traits::models(input)) in_models = Traits::models(input);
      mojo::internal::MessageFragment<
          typename decltype(fragment->models)::BaseType>
          models_fragment(fragment.message());
      constexpr const mojo::internal::ContainerValidateParams& models_validate_params =
          mojo::internal::GetArrayValidator<0, false, nullptr>();
      
      mojo::internal::Serialize<mojo::ArrayDataView<::optimization_guide::mojom::BrokerModelInfoDataView>, send_validation>(
        in_models,
        models_fragment,
        &models_validate_params);

      fragment->models.Set(
          models_fragment.is_null() ? nullptr : models_fragment.data());

      
      MOJO_INTERNAL_CHECK_SERIALIZATION(
        send_validation,
        !(fragment->models.is_null()),
        mojo::internal::VALIDATION_ERROR_UNEXPECTED_NULL_POINTER,
        "null models in BrokerStateInfo struct");
      fragment->model_crash_count_$flag = Traits::model_crash_count(input).has_value();
      if (Traits::model_crash_count(input).has_value()) {
        fragment->model_crash_count_$value = Traits::model_crash_count(input).value();
      }
      fragment->max_model_crash_count_$flag = Traits::max_model_crash_count(input).has_value();
      if (Traits::max_model_crash_count(input).has_value()) {
        fragment->max_model_crash_count_$value = Traits::max_model_crash_count(input).value();
      }

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

}  // namespace mojo::internal

#endif  // COMPONENTS_OPTIMIZATION_GUIDE_PUBLIC_MOJOM_MODEL_BROKER_DEBUG_MOJOM_SEND_VALIDATION_H_