// chrome/updater/mojom/updater_service.mojom-shared.h is auto generated by mojom_bindings_generator.py, do not edit

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

#ifndef CHROME_UPDATER_MOJOM_UPDATER_SERVICE_MOJOM_SHARED_H_
#define CHROME_UPDATER_MOJOM_UPDATER_SERVICE_MOJOM_SHARED_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/map_data_view.h"
#include "mojo/public/cpp/bindings/string_data_view.h"
#include "mojo/public/cpp/system/message_pipe.h"

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

#include "chrome/updater/mojom/updater_service.mojom-shared-internal.h"
#include "mojo/public/mojom/base/file_path.mojom-shared.h"
#include "mojo/public/mojom/base/time.mojom-shared.h"
#include "chrome/enterprise_companion/mojom/policy_fetch_reason.mojom-shared.h"
#include "mojo/public/cpp/bindings/lib/interface_serialization.h"
#include "mojo/public/cpp/system/data_pipe.h"



#include "chrome/updater/mojom/updater_service.mojom-data-view.h"  // IWYU pragma: export




namespace std {

template <>
struct hash<::updater::mojom::UpdateState_State>
    : public mojo::internal::EnumHashImpl<::updater::mojom::UpdateState_State> {};

template <>
struct hash<::updater::mojom::UpdateService_PolicySameVersionUpdate>
    : public mojo::internal::EnumHashImpl<::updater::mojom::UpdateService_PolicySameVersionUpdate> {};

template <>
struct hash<::updater::mojom::UpdateService_Result>
    : public mojo::internal::EnumHashImpl<::updater::mojom::UpdateService_Result> {};

template <>
struct hash<::updater::mojom::UpdateService_ErrorCategory>
    : public mojo::internal::EnumHashImpl<::updater::mojom::UpdateService_ErrorCategory> {};

template <>
struct hash<::updater::mojom::UpdateService_Priority>
    : public mojo::internal::EnumHashImpl<::updater::mojom::UpdateService_Priority> {};

}  // namespace std

namespace mojo {


namespace internal {

template <typename MaybeConstUserType>
struct Serializer<::updater::mojom::UpdateState_State, MaybeConstUserType> {
  using UserType = typename std::remove_const<MaybeConstUserType>::type;
  using Traits = EnumTraits<::updater::mojom::UpdateState_State, UserType>;

  static void Serialize(UserType input, int32_t* output) {
    *output = static_cast<int32_t>(Traits::ToMojom(input));
  }

  static bool Deserialize(int32_t input, UserType* output) {
    auto known_value = ::mojo::internal::ToKnownEnumValueHelper(
        static_cast<::updater::mojom::UpdateState_State>(input));
    if constexpr (requires {
                    {
                      Traits::FromMojom(known_value)
                    } -> std::same_as<UserType>;
                  }) {
      static_assert(std::same_as<::updater::mojom::UpdateState_State, UserType> ||
                        HasInfallibleConversion(::updater::mojom::UpdateState_State()),
                    "::updater::mojom::UpdateState_State does not have an infallible conversion, "
                    "use an optional return type.");
      *output = Traits::FromMojom(known_value);
      return true;
    } else {
      static_assert(
          requires {
            {
              Traits::FromMojom(known_value)
            } -> std::same_as<std::optional<UserType>>;
          }, "FromMojom must return by value or optional.");
      std::optional<UserType> from_mojom = Traits::FromMojom(known_value);
      if (from_mojom) {
        *output = *from_mojom;
      }
      return from_mojom.has_value();
    }
  }
};

}  // namespace internal


namespace internal {

template <typename MaybeConstUserType>
struct Serializer<::updater::mojom::UpdateService_PolicySameVersionUpdate, MaybeConstUserType> {
  using UserType = typename std::remove_const<MaybeConstUserType>::type;
  using Traits = EnumTraits<::updater::mojom::UpdateService_PolicySameVersionUpdate, UserType>;

  static void Serialize(UserType input, int32_t* output) {
    *output = static_cast<int32_t>(Traits::ToMojom(input));
  }

  static bool Deserialize(int32_t input, UserType* output) {
    auto known_value = ::mojo::internal::ToKnownEnumValueHelper(
        static_cast<::updater::mojom::UpdateService_PolicySameVersionUpdate>(input));
    if constexpr (requires {
                    {
                      Traits::FromMojom(known_value)
                    } -> std::same_as<UserType>;
                  }) {
      static_assert(std::same_as<::updater::mojom::UpdateService_PolicySameVersionUpdate, UserType> ||
                        HasInfallibleConversion(::updater::mojom::UpdateService_PolicySameVersionUpdate()),
                    "::updater::mojom::UpdateService_PolicySameVersionUpdate does not have an infallible conversion, "
                    "use an optional return type.");
      *output = Traits::FromMojom(known_value);
      return true;
    } else {
      static_assert(
          requires {
            {
              Traits::FromMojom(known_value)
            } -> std::same_as<std::optional<UserType>>;
          }, "FromMojom must return by value or optional.");
      std::optional<UserType> from_mojom = Traits::FromMojom(known_value);
      if (from_mojom) {
        *output = *from_mojom;
      }
      return from_mojom.has_value();
    }
  }
};

}  // namespace internal


namespace internal {

template <typename MaybeConstUserType>
struct Serializer<::updater::mojom::UpdateService_Result, MaybeConstUserType> {
  using UserType = typename std::remove_const<MaybeConstUserType>::type;
  using Traits = EnumTraits<::updater::mojom::UpdateService_Result, UserType>;

  static void Serialize(UserType input, int32_t* output) {
    *output = static_cast<int32_t>(Traits::ToMojom(input));
  }

  static bool Deserialize(int32_t input, UserType* output) {
    auto known_value = ::mojo::internal::ToKnownEnumValueHelper(
        static_cast<::updater::mojom::UpdateService_Result>(input));
    if constexpr (requires {
                    {
                      Traits::FromMojom(known_value)
                    } -> std::same_as<UserType>;
                  }) {
      static_assert(std::same_as<::updater::mojom::UpdateService_Result, UserType> ||
                        HasInfallibleConversion(::updater::mojom::UpdateService_Result()),
                    "::updater::mojom::UpdateService_Result does not have an infallible conversion, "
                    "use an optional return type.");
      *output = Traits::FromMojom(known_value);
      return true;
    } else {
      static_assert(
          requires {
            {
              Traits::FromMojom(known_value)
            } -> std::same_as<std::optional<UserType>>;
          }, "FromMojom must return by value or optional.");
      std::optional<UserType> from_mojom = Traits::FromMojom(known_value);
      if (from_mojom) {
        *output = *from_mojom;
      }
      return from_mojom.has_value();
    }
  }
};

}  // namespace internal


namespace internal {

template <typename MaybeConstUserType>
struct Serializer<::updater::mojom::UpdateService_ErrorCategory, MaybeConstUserType> {
  using UserType = typename std::remove_const<MaybeConstUserType>::type;
  using Traits = EnumTraits<::updater::mojom::UpdateService_ErrorCategory, UserType>;

  static void Serialize(UserType input, int32_t* output) {
    *output = static_cast<int32_t>(Traits::ToMojom(input));
  }

  static bool Deserialize(int32_t input, UserType* output) {
    auto known_value = ::mojo::internal::ToKnownEnumValueHelper(
        static_cast<::updater::mojom::UpdateService_ErrorCategory>(input));
    if constexpr (requires {
                    {
                      Traits::FromMojom(known_value)
                    } -> std::same_as<UserType>;
                  }) {
      static_assert(std::same_as<::updater::mojom::UpdateService_ErrorCategory, UserType> ||
                        HasInfallibleConversion(::updater::mojom::UpdateService_ErrorCategory()),
                    "::updater::mojom::UpdateService_ErrorCategory does not have an infallible conversion, "
                    "use an optional return type.");
      *output = Traits::FromMojom(known_value);
      return true;
    } else {
      static_assert(
          requires {
            {
              Traits::FromMojom(known_value)
            } -> std::same_as<std::optional<UserType>>;
          }, "FromMojom must return by value or optional.");
      std::optional<UserType> from_mojom = Traits::FromMojom(known_value);
      if (from_mojom) {
        *output = *from_mojom;
      }
      return from_mojom.has_value();
    }
  }
};

}  // namespace internal


namespace internal {

template <typename MaybeConstUserType>
struct Serializer<::updater::mojom::UpdateService_Priority, MaybeConstUserType> {
  using UserType = typename std::remove_const<MaybeConstUserType>::type;
  using Traits = EnumTraits<::updater::mojom::UpdateService_Priority, UserType>;

  static void Serialize(UserType input, int32_t* output) {
    *output = static_cast<int32_t>(Traits::ToMojom(input));
  }

  static bool Deserialize(int32_t input, UserType* output) {
    auto known_value = ::mojo::internal::ToKnownEnumValueHelper(
        static_cast<::updater::mojom::UpdateService_Priority>(input));
    if constexpr (requires {
                    {
                      Traits::FromMojom(known_value)
                    } -> std::same_as<UserType>;
                  }) {
      static_assert(std::same_as<::updater::mojom::UpdateService_Priority, UserType> ||
                        HasInfallibleConversion(::updater::mojom::UpdateService_Priority()),
                    "::updater::mojom::UpdateService_Priority does not have an infallible conversion, "
                    "use an optional return type.");
      *output = Traits::FromMojom(known_value);
      return true;
    } else {
      static_assert(
          requires {
            {
              Traits::FromMojom(known_value)
            } -> std::same_as<std::optional<UserType>>;
          }, "FromMojom must return by value or optional.");
      std::optional<UserType> from_mojom = Traits::FromMojom(known_value);
      if (from_mojom) {
        *output = *from_mojom;
      }
      return from_mojom.has_value();
    }
  }
};

}  // namespace internal


namespace internal {

template <typename MaybeConstUserType>
struct Serializer<::updater::mojom::RegistrationRequestDataView, MaybeConstUserType> {
  using UserType = typename std::remove_const<MaybeConstUserType>::type;
  using Traits = StructTraits<::updater::mojom::RegistrationRequestDataView, UserType>;

  static void Serialize(
      MaybeConstUserType& input,
      mojo::internal::MessageFragment<::updater::mojom::internal::RegistrationRequest_Data>& fragment) {
    if (CallIsNullIfExists<Traits>(input))
      return;
    fragment.Allocate();

    decltype(Traits::app_id(input)) in_app_id = Traits::app_id(input);
    mojo::internal::MessageFragment<
        typename decltype(fragment->app_id)::BaseType> app_id_fragment(
            fragment.message());
    
    mojo::internal::Serialize<mojo::StringDataView>(
      in_app_id,
      app_id_fragment);

    fragment->app_id.Set(
        app_id_fragment.is_null() ? nullptr : app_id_fragment.data());

    
    MOJO_INTERNAL_CHECK_SERIALIZATION(
      mojo::internal::SendValidation::kDefault,
      !(fragment->app_id.is_null()),
      mojo::internal::VALIDATION_ERROR_UNEXPECTED_NULL_POINTER,
      "null app_id in RegistrationRequest struct");

    decltype(Traits::brand_code(input)) in_brand_code = Traits::brand_code(input);
    mojo::internal::MessageFragment<
        typename decltype(fragment->brand_code)::BaseType> brand_code_fragment(
            fragment.message());
    
    mojo::internal::Serialize<mojo::StringDataView>(
      in_brand_code,
      brand_code_fragment);

    fragment->brand_code.Set(
        brand_code_fragment.is_null() ? nullptr : brand_code_fragment.data());

    
    MOJO_INTERNAL_CHECK_SERIALIZATION(
      mojo::internal::SendValidation::kDefault,
      !(fragment->brand_code.is_null()),
      mojo::internal::VALIDATION_ERROR_UNEXPECTED_NULL_POINTER,
      "null brand_code in RegistrationRequest struct");

    decltype(Traits::brand_path(input)) in_brand_path = Traits::brand_path(input);
    mojo::internal::MessageFragment<
        typename decltype(fragment->brand_path)::BaseType> brand_path_fragment(
            fragment.message());
    
    mojo::internal::Serialize<::mojo_base::mojom::FilePathDataView>(
      in_brand_path,
      brand_path_fragment);

    fragment->brand_path.Set(
        brand_path_fragment.is_null() ? nullptr : brand_path_fragment.data());

    
    MOJO_INTERNAL_CHECK_SERIALIZATION(
      mojo::internal::SendValidation::kDefault,
      !(fragment->brand_path.is_null()),
      mojo::internal::VALIDATION_ERROR_UNEXPECTED_NULL_POINTER,
      "null brand_path in RegistrationRequest struct");

    decltype(Traits::ap(input)) in_ap = Traits::ap(input);
    mojo::internal::MessageFragment<
        typename decltype(fragment->ap)::BaseType> ap_fragment(
            fragment.message());
    
    mojo::internal::Serialize<mojo::StringDataView>(
      in_ap,
      ap_fragment);

    fragment->ap.Set(
        ap_fragment.is_null() ? nullptr : ap_fragment.data());

    
    MOJO_INTERNAL_CHECK_SERIALIZATION(
      mojo::internal::SendValidation::kDefault,
      !(fragment->ap.is_null()),
      mojo::internal::VALIDATION_ERROR_UNEXPECTED_NULL_POINTER,
      "null ap in RegistrationRequest 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>(
      in_version,
      version_fragment);

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

    
    MOJO_INTERNAL_CHECK_SERIALIZATION(
      mojo::internal::SendValidation::kDefault,
      !(fragment->version.is_null()),
      mojo::internal::VALIDATION_ERROR_UNEXPECTED_NULL_POINTER,
      "null version in RegistrationRequest struct");

    decltype(Traits::existence_checker_path(input)) in_existence_checker_path = Traits::existence_checker_path(input);
    mojo::internal::MessageFragment<
        typename decltype(fragment->existence_checker_path)::BaseType> existence_checker_path_fragment(
            fragment.message());
    
    mojo::internal::Serialize<::mojo_base::mojom::FilePathDataView>(
      in_existence_checker_path,
      existence_checker_path_fragment);

    fragment->existence_checker_path.Set(
        existence_checker_path_fragment.is_null() ? nullptr : existence_checker_path_fragment.data());

    
    MOJO_INTERNAL_CHECK_SERIALIZATION(
      mojo::internal::SendValidation::kDefault,
      !(fragment->existence_checker_path.is_null()),
      mojo::internal::VALIDATION_ERROR_UNEXPECTED_NULL_POINTER,
      "null existence_checker_path in RegistrationRequest struct");

    decltype(Traits::ap_path(input)) in_ap_path = Traits::ap_path(input);
    mojo::internal::MessageFragment<
        typename decltype(fragment->ap_path)::BaseType> ap_path_fragment(
            fragment.message());
    
    mojo::internal::Serialize<::mojo_base::mojom::FilePathDataView>(
      in_ap_path,
      ap_path_fragment);

    fragment->ap_path.Set(
        ap_path_fragment.is_null() ? nullptr : ap_path_fragment.data());

    decltype(Traits::ap_key(input)) in_ap_key = Traits::ap_key(input);
    mojo::internal::MessageFragment<
        typename decltype(fragment->ap_key)::BaseType> ap_key_fragment(
            fragment.message());
    
    mojo::internal::Serialize<mojo::StringDataView>(
      in_ap_key,
      ap_key_fragment);

    fragment->ap_key.Set(
        ap_key_fragment.is_null() ? nullptr : ap_key_fragment.data());

    decltype(Traits::version_path(input)) in_version_path = Traits::version_path(input);
    mojo::internal::MessageFragment<
        typename decltype(fragment->version_path)::BaseType> version_path_fragment(
            fragment.message());
    
    mojo::internal::Serialize<::mojo_base::mojom::FilePathDataView>(
      in_version_path,
      version_path_fragment);

    fragment->version_path.Set(
        version_path_fragment.is_null() ? nullptr : version_path_fragment.data());

    decltype(Traits::version_key(input)) in_version_key = Traits::version_key(input);
    mojo::internal::MessageFragment<
        typename decltype(fragment->version_key)::BaseType> version_key_fragment(
            fragment.message());
    
    mojo::internal::Serialize<mojo::StringDataView>(
      in_version_key,
      version_key_fragment);

    fragment->version_key.Set(
        version_key_fragment.is_null() ? nullptr : version_key_fragment.data());

    decltype(Traits::install_id(input)) in_install_id = Traits::install_id(input);
    mojo::internal::MessageFragment<
        typename decltype(fragment->install_id)::BaseType> install_id_fragment(
            fragment.message());
    
    mojo::internal::Serialize<mojo::StringDataView>(
      in_install_id,
      install_id_fragment);

    fragment->install_id.Set(
        install_id_fragment.is_null() ? nullptr : install_id_fragment.data());

    decltype(Traits::lang(input)) in_lang = Traits::lang(input);
    mojo::internal::MessageFragment<
        typename decltype(fragment->lang)::BaseType> lang_fragment(
            fragment.message());
    
    mojo::internal::Serialize<mojo::StringDataView>(
      in_lang,
      lang_fragment);

    fragment->lang.Set(
        lang_fragment.is_null() ? nullptr : lang_fragment.data());
    fragment->dla_$flag = Traits::dla(input).has_value();
    if (Traits::dla(input).has_value()) {
      fragment->dla_$value = Traits::dla(input).value();
    }
    fragment->dlrc_$flag = Traits::dlrc(input).has_value();
    if (Traits::dlrc(input).has_value()) {
      fragment->dlrc_$value = Traits::dlrc(input).value();
    }
    fragment->install_date_$flag = Traits::install_date(input).has_value();
    if (Traits::install_date(input).has_value()) {
      fragment->install_date_$value = Traits::install_date(input).value();
    }

    decltype(Traits::cohort(input)) in_cohort = Traits::cohort(input);
    mojo::internal::MessageFragment<
        typename decltype(fragment->cohort)::BaseType> cohort_fragment(
            fragment.message());
    
    mojo::internal::Serialize<mojo::StringDataView>(
      in_cohort,
      cohort_fragment);

    fragment->cohort.Set(
        cohort_fragment.is_null() ? nullptr : cohort_fragment.data());

    decltype(Traits::cohort_name(input)) in_cohort_name = Traits::cohort_name(input);
    mojo::internal::MessageFragment<
        typename decltype(fragment->cohort_name)::BaseType> cohort_name_fragment(
            fragment.message());
    
    mojo::internal::Serialize<mojo::StringDataView>(
      in_cohort_name,
      cohort_name_fragment);

    fragment->cohort_name.Set(
        cohort_name_fragment.is_null() ? nullptr : cohort_name_fragment.data());

    decltype(Traits::cohort_hint(input)) in_cohort_hint = Traits::cohort_hint(input);
    mojo::internal::MessageFragment<
        typename decltype(fragment->cohort_hint)::BaseType> cohort_hint_fragment(
            fragment.message());
    
    mojo::internal::Serialize<mojo::StringDataView>(
      in_cohort_hint,
      cohort_hint_fragment);

    fragment->cohort_hint.Set(
        cohort_hint_fragment.is_null() ? nullptr : cohort_hint_fragment.data());
  }

  static bool Deserialize(::updater::mojom::internal::RegistrationRequest_Data* input,
                          UserType* output,
                          Message* message) {
    if (!input)
      return CallSetToNullIfExists<Traits>(output);

    ::updater::mojom::RegistrationRequestDataView data_view(input, message);
    return CallTraitsRead<Traits>(data_view, output);
  }
};

}  // namespace internal


namespace internal {

template <typename MaybeConstUserType>
struct Serializer<::updater::mojom::UpdateStateDataView, MaybeConstUserType> {
  using UserType = typename std::remove_const<MaybeConstUserType>::type;
  using Traits = StructTraits<::updater::mojom::UpdateStateDataView, UserType>;

  static void Serialize(
      MaybeConstUserType& input,
      mojo::internal::MessageFragment<::updater::mojom::internal::UpdateState_Data>& fragment) {
    if (CallIsNullIfExists<Traits>(input))
      return;
    fragment.Allocate();

    decltype(Traits::app_id(input)) in_app_id = Traits::app_id(input);
    mojo::internal::MessageFragment<
        typename decltype(fragment->app_id)::BaseType> app_id_fragment(
            fragment.message());
    
    mojo::internal::Serialize<mojo::StringDataView>(
      in_app_id,
      app_id_fragment);

    fragment->app_id.Set(
        app_id_fragment.is_null() ? nullptr : app_id_fragment.data());

    
    MOJO_INTERNAL_CHECK_SERIALIZATION(
      mojo::internal::SendValidation::kDefault,
      !(fragment->app_id.is_null()),
      mojo::internal::VALIDATION_ERROR_UNEXPECTED_NULL_POINTER,
      "null app_id in UpdateState struct");

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

    decltype(Traits::next_version(input)) in_next_version = Traits::next_version(input);
    mojo::internal::MessageFragment<
        typename decltype(fragment->next_version)::BaseType> next_version_fragment(
            fragment.message());
    
    mojo::internal::Serialize<mojo::StringDataView>(
      in_next_version,
      next_version_fragment);

    fragment->next_version.Set(
        next_version_fragment.is_null() ? nullptr : next_version_fragment.data());

    
    MOJO_INTERNAL_CHECK_SERIALIZATION(
      mojo::internal::SendValidation::kDefault,
      !(fragment->next_version.is_null()),
      mojo::internal::VALIDATION_ERROR_UNEXPECTED_NULL_POINTER,
      "null next_version in UpdateState struct");

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

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

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

    
    mojo::internal::Serialize<::updater::mojom::UpdateService_ErrorCategory>(
      Traits::error_category(input),
      &fragment->error_category);

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

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

    decltype(Traits::installer_text(input)) in_installer_text = Traits::installer_text(input);
    mojo::internal::MessageFragment<
        typename decltype(fragment->installer_text)::BaseType> installer_text_fragment(
            fragment.message());
    
    mojo::internal::Serialize<mojo::StringDataView>(
      in_installer_text,
      installer_text_fragment);

    fragment->installer_text.Set(
        installer_text_fragment.is_null() ? nullptr : installer_text_fragment.data());

    
    MOJO_INTERNAL_CHECK_SERIALIZATION(
      mojo::internal::SendValidation::kDefault,
      !(fragment->installer_text.is_null()),
      mojo::internal::VALIDATION_ERROR_UNEXPECTED_NULL_POINTER,
      "null installer_text in UpdateState struct");

    decltype(Traits::installer_cmd_line(input)) in_installer_cmd_line = Traits::installer_cmd_line(input);
    mojo::internal::MessageFragment<
        typename decltype(fragment->installer_cmd_line)::BaseType> installer_cmd_line_fragment(
            fragment.message());
    
    mojo::internal::Serialize<mojo::StringDataView>(
      in_installer_cmd_line,
      installer_cmd_line_fragment);

    fragment->installer_cmd_line.Set(
        installer_cmd_line_fragment.is_null() ? nullptr : installer_cmd_line_fragment.data());

    
    MOJO_INTERNAL_CHECK_SERIALIZATION(
      mojo::internal::SendValidation::kDefault,
      !(fragment->installer_cmd_line.is_null()),
      mojo::internal::VALIDATION_ERROR_UNEXPECTED_NULL_POINTER,
      "null installer_cmd_line in UpdateState struct");
  }

  static bool Deserialize(::updater::mojom::internal::UpdateState_Data* input,
                          UserType* output,
                          Message* message) {
    if (!input)
      return CallSetToNullIfExists<Traits>(output);

    ::updater::mojom::UpdateStateDataView data_view(input, message);
    return CallTraitsRead<Traits>(data_view, output);
  }
};

}  // namespace internal


namespace internal {

template <typename MaybeConstUserType>
struct Serializer<::updater::mojom::AppStateDataView, MaybeConstUserType> {
  using UserType = typename std::remove_const<MaybeConstUserType>::type;
  using Traits = StructTraits<::updater::mojom::AppStateDataView, UserType>;

  static void Serialize(
      MaybeConstUserType& input,
      mojo::internal::MessageFragment<::updater::mojom::internal::AppState_Data>& fragment) {
    if (CallIsNullIfExists<Traits>(input))
      return;
    fragment.Allocate();

    decltype(Traits::app_id(input)) in_app_id = Traits::app_id(input);
    mojo::internal::MessageFragment<
        typename decltype(fragment->app_id)::BaseType> app_id_fragment(
            fragment.message());
    
    mojo::internal::Serialize<mojo::StringDataView>(
      in_app_id,
      app_id_fragment);

    fragment->app_id.Set(
        app_id_fragment.is_null() ? nullptr : app_id_fragment.data());

    
    MOJO_INTERNAL_CHECK_SERIALIZATION(
      mojo::internal::SendValidation::kDefault,
      !(fragment->app_id.is_null()),
      mojo::internal::VALIDATION_ERROR_UNEXPECTED_NULL_POINTER,
      "null app_id in AppState 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>(
      in_version,
      version_fragment);

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

    
    MOJO_INTERNAL_CHECK_SERIALIZATION(
      mojo::internal::SendValidation::kDefault,
      !(fragment->version.is_null()),
      mojo::internal::VALIDATION_ERROR_UNEXPECTED_NULL_POINTER,
      "null version in AppState struct");

    decltype(Traits::ap(input)) in_ap = Traits::ap(input);
    mojo::internal::MessageFragment<
        typename decltype(fragment->ap)::BaseType> ap_fragment(
            fragment.message());
    
    mojo::internal::Serialize<mojo::StringDataView>(
      in_ap,
      ap_fragment);

    fragment->ap.Set(
        ap_fragment.is_null() ? nullptr : ap_fragment.data());

    
    MOJO_INTERNAL_CHECK_SERIALIZATION(
      mojo::internal::SendValidation::kDefault,
      !(fragment->ap.is_null()),
      mojo::internal::VALIDATION_ERROR_UNEXPECTED_NULL_POINTER,
      "null ap in AppState struct");

    decltype(Traits::brand_code(input)) in_brand_code = Traits::brand_code(input);
    mojo::internal::MessageFragment<
        typename decltype(fragment->brand_code)::BaseType> brand_code_fragment(
            fragment.message());
    
    mojo::internal::Serialize<mojo::StringDataView>(
      in_brand_code,
      brand_code_fragment);

    fragment->brand_code.Set(
        brand_code_fragment.is_null() ? nullptr : brand_code_fragment.data());

    
    MOJO_INTERNAL_CHECK_SERIALIZATION(
      mojo::internal::SendValidation::kDefault,
      !(fragment->brand_code.is_null()),
      mojo::internal::VALIDATION_ERROR_UNEXPECTED_NULL_POINTER,
      "null brand_code in AppState struct");

    decltype(Traits::brand_path(input)) in_brand_path = Traits::brand_path(input);
    mojo::internal::MessageFragment<
        typename decltype(fragment->brand_path)::BaseType> brand_path_fragment(
            fragment.message());
    
    mojo::internal::Serialize<::mojo_base::mojom::FilePathDataView>(
      in_brand_path,
      brand_path_fragment);

    fragment->brand_path.Set(
        brand_path_fragment.is_null() ? nullptr : brand_path_fragment.data());

    
    MOJO_INTERNAL_CHECK_SERIALIZATION(
      mojo::internal::SendValidation::kDefault,
      !(fragment->brand_path.is_null()),
      mojo::internal::VALIDATION_ERROR_UNEXPECTED_NULL_POINTER,
      "null brand_path in AppState struct");

    decltype(Traits::ecp(input)) in_ecp = Traits::ecp(input);
    mojo::internal::MessageFragment<
        typename decltype(fragment->ecp)::BaseType> ecp_fragment(
            fragment.message());
    
    mojo::internal::Serialize<::mojo_base::mojom::FilePathDataView>(
      in_ecp,
      ecp_fragment);

    fragment->ecp.Set(
        ecp_fragment.is_null() ? nullptr : ecp_fragment.data());

    
    MOJO_INTERNAL_CHECK_SERIALIZATION(
      mojo::internal::SendValidation::kDefault,
      !(fragment->ecp.is_null()),
      mojo::internal::VALIDATION_ERROR_UNEXPECTED_NULL_POINTER,
      "null ecp in AppState struct");

    decltype(Traits::ap_path(input)) in_ap_path = Traits::ap_path(input);
    mojo::internal::MessageFragment<
        typename decltype(fragment->ap_path)::BaseType> ap_path_fragment(
            fragment.message());
    
    mojo::internal::Serialize<::mojo_base::mojom::FilePathDataView>(
      in_ap_path,
      ap_path_fragment);

    fragment->ap_path.Set(
        ap_path_fragment.is_null() ? nullptr : ap_path_fragment.data());

    decltype(Traits::ap_key(input)) in_ap_key = Traits::ap_key(input);
    mojo::internal::MessageFragment<
        typename decltype(fragment->ap_key)::BaseType> ap_key_fragment(
            fragment.message());
    
    mojo::internal::Serialize<mojo::StringDataView>(
      in_ap_key,
      ap_key_fragment);

    fragment->ap_key.Set(
        ap_key_fragment.is_null() ? nullptr : ap_key_fragment.data());

    decltype(Traits::version_path(input)) in_version_path = Traits::version_path(input);
    mojo::internal::MessageFragment<
        typename decltype(fragment->version_path)::BaseType> version_path_fragment(
            fragment.message());
    
    mojo::internal::Serialize<::mojo_base::mojom::FilePathDataView>(
      in_version_path,
      version_path_fragment);

    fragment->version_path.Set(
        version_path_fragment.is_null() ? nullptr : version_path_fragment.data());

    decltype(Traits::version_key(input)) in_version_key = Traits::version_key(input);
    mojo::internal::MessageFragment<
        typename decltype(fragment->version_key)::BaseType> version_key_fragment(
            fragment.message());
    
    mojo::internal::Serialize<mojo::StringDataView>(
      in_version_key,
      version_key_fragment);

    fragment->version_key.Set(
        version_key_fragment.is_null() ? nullptr : version_key_fragment.data());

    decltype(Traits::cohort(input)) in_cohort = Traits::cohort(input);
    mojo::internal::MessageFragment<
        typename decltype(fragment->cohort)::BaseType> cohort_fragment(
            fragment.message());
    
    mojo::internal::Serialize<mojo::StringDataView>(
      in_cohort,
      cohort_fragment);

    fragment->cohort.Set(
        cohort_fragment.is_null() ? nullptr : cohort_fragment.data());
  }

  static bool Deserialize(::updater::mojom::internal::AppState_Data* input,
                          UserType* output,
                          Message* message) {
    if (!input)
      return CallSetToNullIfExists<Traits>(output);

    ::updater::mojom::AppStateDataView data_view(input, message);
    return CallTraitsRead<Traits>(data_view, output);
  }
};

}  // namespace internal


namespace internal {

template <typename MaybeConstUserType>
struct Serializer<::updater::mojom::UpdaterStateDataView, MaybeConstUserType> {
  using UserType = typename std::remove_const<MaybeConstUserType>::type;
  using Traits = StructTraits<::updater::mojom::UpdaterStateDataView, UserType>;

  static void Serialize(
      MaybeConstUserType& input,
      mojo::internal::MessageFragment<::updater::mojom::internal::UpdaterState_Data>& fragment) {
    if (CallIsNullIfExists<Traits>(input))
      return;
    fragment.Allocate();

    decltype(Traits::active_version(input)) in_active_version = Traits::active_version(input);
    mojo::internal::MessageFragment<
        typename decltype(fragment->active_version)::BaseType> active_version_fragment(
            fragment.message());
    
    mojo::internal::Serialize<mojo::StringDataView>(
      in_active_version,
      active_version_fragment);

    fragment->active_version.Set(
        active_version_fragment.is_null() ? nullptr : active_version_fragment.data());

    
    MOJO_INTERNAL_CHECK_SERIALIZATION(
      mojo::internal::SendValidation::kDefault,
      !(fragment->active_version.is_null()),
      mojo::internal::VALIDATION_ERROR_UNEXPECTED_NULL_POINTER,
      "null active_version in UpdaterState struct");

    decltype(Traits::inactive_versions(input)) in_inactive_versions = Traits::inactive_versions(input);
    mojo::internal::MessageFragment<
        typename decltype(fragment->inactive_versions)::BaseType>
        inactive_versions_fragment(fragment.message());
    constexpr const mojo::internal::ContainerValidateParams& inactive_versions_validate_params =
        mojo::internal::GetArrayValidator<0, false, &mojo::internal::GetArrayValidator<0, false, nullptr>()>();
    
    mojo::internal::Serialize<mojo::ArrayDataView<mojo::StringDataView>>(
      in_inactive_versions,
      inactive_versions_fragment,
      &inactive_versions_validate_params);

    fragment->inactive_versions.Set(
        inactive_versions_fragment.is_null() ? nullptr : inactive_versions_fragment.data());

    
    MOJO_INTERNAL_CHECK_SERIALIZATION(
      mojo::internal::SendValidation::kDefault,
      !(fragment->inactive_versions.is_null()),
      mojo::internal::VALIDATION_ERROR_UNEXPECTED_NULL_POINTER,
      "null inactive_versions in UpdaterState struct");

    decltype(Traits::last_checked(input)) in_last_checked = Traits::last_checked(input);
    mojo::internal::MessageFragment<
        typename decltype(fragment->last_checked)::BaseType> last_checked_fragment(
            fragment.message());
    
    mojo::internal::Serialize<::mojo_base::mojom::TimeDataView>(
      in_last_checked,
      last_checked_fragment);

    fragment->last_checked.Set(
        last_checked_fragment.is_null() ? nullptr : last_checked_fragment.data());

    
    MOJO_INTERNAL_CHECK_SERIALIZATION(
      mojo::internal::SendValidation::kDefault,
      !(fragment->last_checked.is_null()),
      mojo::internal::VALIDATION_ERROR_UNEXPECTED_NULL_POINTER,
      "null last_checked in UpdaterState struct");

    decltype(Traits::last_started(input)) in_last_started = Traits::last_started(input);
    mojo::internal::MessageFragment<
        typename decltype(fragment->last_started)::BaseType> last_started_fragment(
            fragment.message());
    
    mojo::internal::Serialize<::mojo_base::mojom::TimeDataView>(
      in_last_started,
      last_started_fragment);

    fragment->last_started.Set(
        last_started_fragment.is_null() ? nullptr : last_started_fragment.data());

    
    MOJO_INTERNAL_CHECK_SERIALIZATION(
      mojo::internal::SendValidation::kDefault,
      !(fragment->last_started.is_null()),
      mojo::internal::VALIDATION_ERROR_UNEXPECTED_NULL_POINTER,
      "null last_started in UpdaterState struct");
  }

  static bool Deserialize(::updater::mojom::internal::UpdaterState_Data* input,
                          UserType* output,
                          Message* message) {
    if (!input)
      return CallSetToNullIfExists<Traits>(output);

    ::updater::mojom::UpdaterStateDataView data_view(input, message);
    return CallTraitsRead<Traits>(data_view, output);
  }
};

}  // namespace internal

}  // namespace mojo


namespace updater::mojom {

inline void RegistrationRequestDataView::GetAppIdDataView(
    mojo::StringDataView* output) {
  auto pointer = data_->app_id.Get();
  *output = mojo::StringDataView(pointer, message_);
}
inline void RegistrationRequestDataView::GetBrandCodeDataView(
    mojo::StringDataView* output) {
  auto pointer = data_->brand_code.Get();
  *output = mojo::StringDataView(pointer, message_);
}
inline void RegistrationRequestDataView::GetBrandPathDataView(
    ::mojo_base::mojom::FilePathDataView* output) {
  auto pointer = data_->brand_path.Get();
  *output = ::mojo_base::mojom::FilePathDataView(pointer, message_);
}
inline void RegistrationRequestDataView::GetApDataView(
    mojo::StringDataView* output) {
  auto pointer = data_->ap.Get();
  *output = mojo::StringDataView(pointer, message_);
}
inline void RegistrationRequestDataView::GetVersionDataView(
    mojo::StringDataView* output) {
  auto pointer = data_->version.Get();
  *output = mojo::StringDataView(pointer, message_);
}
inline void RegistrationRequestDataView::GetExistenceCheckerPathDataView(
    ::mojo_base::mojom::FilePathDataView* output) {
  auto pointer = data_->existence_checker_path.Get();
  *output = ::mojo_base::mojom::FilePathDataView(pointer, message_);
}
inline void RegistrationRequestDataView::GetApPathDataView(
    ::mojo_base::mojom::FilePathDataView* output) {
  auto pointer = data_->header_.version >= 1
                 ? data_->ap_path.Get() : nullptr;
  *output = ::mojo_base::mojom::FilePathDataView(pointer, message_);
}
inline void RegistrationRequestDataView::GetApKeyDataView(
    mojo::StringDataView* output) {
  auto pointer = data_->header_.version >= 1
                 ? data_->ap_key.Get() : nullptr;
  *output = mojo::StringDataView(pointer, message_);
}
inline void RegistrationRequestDataView::GetVersionPathDataView(
    ::mojo_base::mojom::FilePathDataView* output) {
  auto pointer = data_->header_.version >= 1
                 ? data_->version_path.Get() : nullptr;
  *output = ::mojo_base::mojom::FilePathDataView(pointer, message_);
}
inline void RegistrationRequestDataView::GetVersionKeyDataView(
    mojo::StringDataView* output) {
  auto pointer = data_->header_.version >= 1
                 ? data_->version_key.Get() : nullptr;
  *output = mojo::StringDataView(pointer, message_);
}
inline void RegistrationRequestDataView::GetInstallIdDataView(
    mojo::StringDataView* output) {
  auto pointer = data_->header_.version >= 2
                 ? data_->install_id.Get() : nullptr;
  *output = mojo::StringDataView(pointer, message_);
}
inline void RegistrationRequestDataView::GetLangDataView(
    mojo::StringDataView* output) {
  auto pointer = data_->header_.version >= 3
                 ? data_->lang.Get() : nullptr;
  *output = mojo::StringDataView(pointer, message_);
}
inline void RegistrationRequestDataView::GetCohortDataView(
    mojo::StringDataView* output) {
  auto pointer = data_->header_.version >= 4
                 ? data_->cohort.Get() : nullptr;
  *output = mojo::StringDataView(pointer, message_);
}
inline void RegistrationRequestDataView::GetCohortNameDataView(
    mojo::StringDataView* output) {
  auto pointer = data_->header_.version >= 4
                 ? data_->cohort_name.Get() : nullptr;
  *output = mojo::StringDataView(pointer, message_);
}
inline void RegistrationRequestDataView::GetCohortHintDataView(
    mojo::StringDataView* output) {
  auto pointer = data_->header_.version >= 4
                 ? data_->cohort_hint.Get() : nullptr;
  *output = mojo::StringDataView(pointer, message_);
}


inline void UpdateStateDataView::GetAppIdDataView(
    mojo::StringDataView* output) {
  auto pointer = data_->app_id.Get();
  *output = mojo::StringDataView(pointer, message_);
}
inline void UpdateStateDataView::GetNextVersionDataView(
    mojo::StringDataView* output) {
  auto pointer = data_->next_version.Get();
  *output = mojo::StringDataView(pointer, message_);
}
inline void UpdateStateDataView::GetInstallerTextDataView(
    mojo::StringDataView* output) {
  auto pointer = data_->installer_text.Get();
  *output = mojo::StringDataView(pointer, message_);
}
inline void UpdateStateDataView::GetInstallerCmdLineDataView(
    mojo::StringDataView* output) {
  auto pointer = data_->installer_cmd_line.Get();
  *output = mojo::StringDataView(pointer, message_);
}


inline void AppStateDataView::GetAppIdDataView(
    mojo::StringDataView* output) {
  auto pointer = data_->app_id.Get();
  *output = mojo::StringDataView(pointer, message_);
}
inline void AppStateDataView::GetVersionDataView(
    mojo::StringDataView* output) {
  auto pointer = data_->version.Get();
  *output = mojo::StringDataView(pointer, message_);
}
inline void AppStateDataView::GetApDataView(
    mojo::StringDataView* output) {
  auto pointer = data_->ap.Get();
  *output = mojo::StringDataView(pointer, message_);
}
inline void AppStateDataView::GetBrandCodeDataView(
    mojo::StringDataView* output) {
  auto pointer = data_->brand_code.Get();
  *output = mojo::StringDataView(pointer, message_);
}
inline void AppStateDataView::GetBrandPathDataView(
    ::mojo_base::mojom::FilePathDataView* output) {
  auto pointer = data_->brand_path.Get();
  *output = ::mojo_base::mojom::FilePathDataView(pointer, message_);
}
inline void AppStateDataView::GetEcpDataView(
    ::mojo_base::mojom::FilePathDataView* output) {
  auto pointer = data_->ecp.Get();
  *output = ::mojo_base::mojom::FilePathDataView(pointer, message_);
}
inline void AppStateDataView::GetApPathDataView(
    ::mojo_base::mojom::FilePathDataView* output) {
  auto pointer = data_->header_.version >= 1
                 ? data_->ap_path.Get() : nullptr;
  *output = ::mojo_base::mojom::FilePathDataView(pointer, message_);
}
inline void AppStateDataView::GetApKeyDataView(
    mojo::StringDataView* output) {
  auto pointer = data_->header_.version >= 1
                 ? data_->ap_key.Get() : nullptr;
  *output = mojo::StringDataView(pointer, message_);
}
inline void AppStateDataView::GetVersionPathDataView(
    ::mojo_base::mojom::FilePathDataView* output) {
  auto pointer = data_->header_.version >= 1
                 ? data_->version_path.Get() : nullptr;
  *output = ::mojo_base::mojom::FilePathDataView(pointer, message_);
}
inline void AppStateDataView::GetVersionKeyDataView(
    mojo::StringDataView* output) {
  auto pointer = data_->header_.version >= 1
                 ? data_->version_key.Get() : nullptr;
  *output = mojo::StringDataView(pointer, message_);
}
inline void AppStateDataView::GetCohortDataView(
    mojo::StringDataView* output) {
  auto pointer = data_->header_.version >= 2
                 ? data_->cohort.Get() : nullptr;
  *output = mojo::StringDataView(pointer, message_);
}


inline void UpdaterStateDataView::GetActiveVersionDataView(
    mojo::StringDataView* output) {
  auto pointer = data_->active_version.Get();
  *output = mojo::StringDataView(pointer, message_);
}
inline void UpdaterStateDataView::GetInactiveVersionsDataView(
    mojo::ArrayDataView<mojo::StringDataView>* output) {
  auto pointer = data_->inactive_versions.Get();
  *output = mojo::ArrayDataView<mojo::StringDataView>(pointer, message_);
}
inline void UpdaterStateDataView::GetLastCheckedDataView(
    ::mojo_base::mojom::TimeDataView* output) {
  auto pointer = data_->last_checked.Get();
  *output = ::mojo_base::mojom::TimeDataView(pointer, message_);
}
inline void UpdaterStateDataView::GetLastStartedDataView(
    ::mojo_base::mojom::TimeDataView* output) {
  auto pointer = data_->last_started.Get();
  *output = ::mojo_base::mojom::TimeDataView(pointer, message_);
}



}  // updater::mojom

// Declare TraceFormatTraits for enums, which should be defined in ::perfetto
// namespace.

namespace perfetto {

template <>
struct  TraceFormatTraits<::updater::mojom::UpdateState_State> {
 static void WriteIntoTrace(perfetto::TracedValue context, ::updater::mojom::UpdateState_State value);
};

} // namespace perfetto

namespace perfetto {

template <>
struct  TraceFormatTraits<::updater::mojom::UpdateService_PolicySameVersionUpdate> {
 static void WriteIntoTrace(perfetto::TracedValue context, ::updater::mojom::UpdateService_PolicySameVersionUpdate value);
};

} // namespace perfetto

namespace perfetto {

template <>
struct  TraceFormatTraits<::updater::mojom::UpdateService_Result> {
 static void WriteIntoTrace(perfetto::TracedValue context, ::updater::mojom::UpdateService_Result value);
};

} // namespace perfetto

namespace perfetto {

template <>
struct  TraceFormatTraits<::updater::mojom::UpdateService_ErrorCategory> {
 static void WriteIntoTrace(perfetto::TracedValue context, ::updater::mojom::UpdateService_ErrorCategory value);
};

} // namespace perfetto

namespace perfetto {

template <>
struct  TraceFormatTraits<::updater::mojom::UpdateService_Priority> {
 static void WriteIntoTrace(perfetto::TracedValue context, ::updater::mojom::UpdateService_Priority value);
};

} // namespace perfetto

#endif  // CHROME_UPDATER_MOJOM_UPDATER_SERVICE_MOJOM_SHARED_H_