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

#ifndef UI_ACCESSIBILITY_MOJOM_AX_TREE_UPDATE_MOJOM_TRAITS_H_
#define UI_ACCESSIBILITY_MOJOM_AX_TREE_UPDATE_MOJOM_TRAITS_H_

#include "ui/accessibility/ax_tree_update.h"
#include "ui/accessibility/mojom/ax_node_data_mojom_traits.h"
#include "ui/accessibility/mojom/ax_tree_data_mojom_traits.h"
#include "ui/accessibility/mojom/ax_tree_update.mojom-shared.h"

namespace mojo {

template <>
struct StructTraits<ax::mojom::AXTreeUpdateDataView, ui::AXTreeUpdate> {
  static bool has_tree_data(const ui::AXTreeUpdate& p) {
    return p.has_tree_data;
  }
  static ui::AXTreeData tree_data(const ui::AXTreeUpdate& p) {
    return p.tree_data;
  }
  static int32_t node_id_to_clear(const ui::AXTreeUpdate& p) {
    return p.node_id_to_clear;
  }
  static int32_t root_id(const ui::AXTreeUpdate& p) { return p.root_id; }
  static std::vector<ui::AXNodeData> nodes(const ui::AXTreeUpdate& p) {
    return p.nodes;
  }
  static ax::mojom::EventFrom event_from(const ui::AXTreeUpdate& p) {
    return p.event_from;
  }

  static bool Read(ax::mojom::AXTreeUpdateDataView data, ui::AXTreeUpdate* out);
};

}  // namespace mojo

#endif  // UI_ACCESSIBILITY_MOJOM_AX_TREE_UPDATE_MOJOM_TRAITS_H_
