// ui/events/mojom/motion_event_android.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 UI_EVENTS_MOJOM_MOTION_EVENT_ANDROID_MOJOM_SHARED_H_
#define UI_EVENTS_MOJOM_MOTION_EVENT_ANDROID_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 "ui/events/mojom/motion_event_android.mojom-shared-internal.h"
#include "mojo/public/mojom/base/time.mojom-shared.h"
#include "ui/gfx/geometry/mojom/geometry.mojom-shared.h"




#include "ui/events/mojom/motion_event_android.mojom-data-view.h"  // IWYU pragma: export




namespace std {

}  // namespace std

namespace mojo {


namespace internal {

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

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

    decltype(Traits::position(input)) in_position = Traits::position(input);
    mojo::internal::MessageFragment<
        typename decltype(fragment->position)::BaseType> position_fragment(
            fragment.message());
    
    mojo::internal::Serialize<::gfx::mojom::PointFDataView>(
      in_position,
      position_fragment);

    fragment->position.Set(
        position_fragment.is_null() ? nullptr : position_fragment.data());

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

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

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

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

}  // namespace internal


namespace internal {

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

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

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

    decltype(Traits::pointer_data(input)) in_pointer_data = Traits::pointer_data(input);
    mojo::internal::MessageFragment<
        typename decltype(fragment->pointer_data)::BaseType> pointer_data_fragment(
            fragment.message());
    
    mojo::internal::Serialize<::ui::mojom::PointerCoordinatesDataView>(
      in_pointer_data,
      pointer_data_fragment);

    fragment->pointer_data.Set(
        pointer_data_fragment.is_null() ? nullptr : pointer_data_fragment.data());

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

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

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

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

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

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

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

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

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

}  // namespace internal


namespace internal {

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

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

    decltype(Traits::pointers(input)) in_pointers = Traits::pointers(input);
    mojo::internal::MessageFragment<
        typename decltype(fragment->pointers)::BaseType>
        pointers_fragment(fragment.message());
    constexpr const mojo::internal::ContainerValidateParams& pointers_validate_params =
        mojo::internal::GetArrayValidator<0, false, nullptr>();
    
    mojo::internal::Serialize<mojo::ArrayDataView<::ui::mojom::PointerCoordinatesDataView>>(
      in_pointers,
      pointers_fragment,
      &pointers_validate_params);

    fragment->pointers.Set(
        pointers_fragment.is_null() ? nullptr : pointers_fragment.data());

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

    decltype(Traits::event_time(input)) in_event_time = Traits::event_time(input);
    mojo::internal::MessageFragment<
        typename decltype(fragment->event_time)::BaseType> event_time_fragment(
            fragment.message());
    
    mojo::internal::Serialize<::mojo_base::mojom::TimeTicksDataView>(
      in_event_time,
      event_time_fragment);

    fragment->event_time.Set(
        event_time_fragment.is_null() ? nullptr : event_time_fragment.data());

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

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

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

}  // namespace internal


namespace internal {

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

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

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

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

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

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

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

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

    decltype(Traits::latest_event_time(input)) in_latest_event_time = Traits::latest_event_time(input);
    mojo::internal::MessageFragment<
        typename decltype(fragment->latest_event_time)::BaseType> latest_event_time_fragment(
            fragment.message());
    
    mojo::internal::Serialize<::mojo_base::mojom::TimeTicksDataView>(
      in_latest_event_time,
      latest_event_time_fragment);

    fragment->latest_event_time.Set(
        latest_event_time_fragment.is_null() ? nullptr : latest_event_time_fragment.data());

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

    decltype(Traits::down_time_ms(input)) in_down_time_ms = Traits::down_time_ms(input);
    mojo::internal::MessageFragment<
        typename decltype(fragment->down_time_ms)::BaseType> down_time_ms_fragment(
            fragment.message());
    
    mojo::internal::Serialize<::mojo_base::mojom::TimeTicksDataView>(
      in_down_time_ms,
      down_time_ms_fragment);

    fragment->down_time_ms.Set(
        down_time_ms_fragment.is_null() ? nullptr : down_time_ms_fragment.data());

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

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

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

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

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

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

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

    decltype(Traits::raw_position_offset(input)) in_raw_position_offset = Traits::raw_position_offset(input);
    mojo::internal::MessageFragment<
        typename decltype(fragment->raw_position_offset)::BaseType> raw_position_offset_fragment(
            fragment.message());
    
    mojo::internal::Serialize<::gfx::mojom::Vector2dFDataView>(
      in_raw_position_offset,
      raw_position_offset_fragment);

    fragment->raw_position_offset.Set(
        raw_position_offset_fragment.is_null() ? nullptr : raw_position_offset_fragment.data());

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

    decltype(Traits::pointers(input)) in_pointers = Traits::pointers(input);
    mojo::internal::MessageFragment<
        typename decltype(fragment->pointers)::BaseType>
        pointers_fragment(fragment.message());
    constexpr const mojo::internal::ContainerValidateParams& pointers_validate_params =
        mojo::internal::GetArrayValidator<0, false, nullptr>();
    
    mojo::internal::Serialize<mojo::ArrayDataView<::ui::mojom::MotionEventAndroidCachedPointerDataView>>(
      in_pointers,
      pointers_fragment,
      &pointers_validate_params);

    fragment->pointers.Set(
        pointers_fragment.is_null() ? nullptr : pointers_fragment.data());

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

    decltype(Traits::historical_events(input)) in_historical_events = Traits::historical_events(input);
    mojo::internal::MessageFragment<
        typename decltype(fragment->historical_events)::BaseType>
        historical_events_fragment(fragment.message());
    constexpr const mojo::internal::ContainerValidateParams& historical_events_validate_params =
        mojo::internal::GetArrayValidator<0, false, nullptr>();
    
    mojo::internal::Serialize<mojo::ArrayDataView<::ui::mojom::HistoricalCachedPointerDataView>>(
      in_historical_events,
      historical_events_fragment,
      &historical_events_validate_params);

    fragment->historical_events.Set(
        historical_events_fragment.is_null() ? nullptr : historical_events_fragment.data());

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

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

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

}  // namespace internal

}  // namespace mojo


namespace ui::mojom {

inline void PointerCoordinatesDataView::GetPositionDataView(
    ::gfx::mojom::PointFDataView* output) {
  auto pointer = data_->position.Get();
  *output = ::gfx::mojom::PointFDataView(pointer, message_);
}


inline void MotionEventAndroidCachedPointerDataView::GetPointerDataDataView(
    PointerCoordinatesDataView* output) {
  auto pointer = data_->pointer_data.Get();
  *output = PointerCoordinatesDataView(pointer, message_);
}


inline void HistoricalCachedPointerDataView::GetPointersDataView(
    mojo::ArrayDataView<PointerCoordinatesDataView>* output) {
  auto pointer = data_->pointers.Get();
  *output = mojo::ArrayDataView<PointerCoordinatesDataView>(pointer, message_);
}
inline void HistoricalCachedPointerDataView::GetEventTimeDataView(
    ::mojo_base::mojom::TimeTicksDataView* output) {
  auto pointer = data_->event_time.Get();
  *output = ::mojo_base::mojom::TimeTicksDataView(pointer, message_);
}


inline void CachedMotionEventAndroidDataView::GetLatestEventTimeDataView(
    ::mojo_base::mojom::TimeTicksDataView* output) {
  auto pointer = data_->latest_event_time.Get();
  *output = ::mojo_base::mojom::TimeTicksDataView(pointer, message_);
}
inline void CachedMotionEventAndroidDataView::GetDownTimeMsDataView(
    ::mojo_base::mojom::TimeTicksDataView* output) {
  auto pointer = data_->down_time_ms.Get();
  *output = ::mojo_base::mojom::TimeTicksDataView(pointer, message_);
}
inline void CachedMotionEventAndroidDataView::GetRawPositionOffsetDataView(
    ::gfx::mojom::Vector2dFDataView* output) {
  auto pointer = data_->raw_position_offset.Get();
  *output = ::gfx::mojom::Vector2dFDataView(pointer, message_);
}
inline void CachedMotionEventAndroidDataView::GetPointersDataView(
    mojo::ArrayDataView<MotionEventAndroidCachedPointerDataView>* output) {
  auto pointer = data_->pointers.Get();
  *output = mojo::ArrayDataView<MotionEventAndroidCachedPointerDataView>(pointer, message_);
}
inline void CachedMotionEventAndroidDataView::GetHistoricalEventsDataView(
    mojo::ArrayDataView<HistoricalCachedPointerDataView>* output) {
  auto pointer = data_->historical_events.Get();
  *output = mojo::ArrayDataView<HistoricalCachedPointerDataView>(pointer, message_);
}



}  // ui::mojom

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

#endif  // UI_EVENTS_MOJOM_MOTION_EVENT_ANDROID_MOJOM_SHARED_H_