// components/omnibox/browser/fusebox_action.mojom-data-view.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.

// This file defines XDataView for type traits and can be included in
// _mojom_traits.h definitions but otherwise please use .mojom-forward.h,
// .mojom-shared.h or .mojom.h.

// IWYU pragma: private
// IWYU pragma: friend "traits"

#ifndef COMPONENTS_OMNIBOX_BROWSER_FUSEBOX_ACTION_MOJOM_DATA_VIEW_H_
#define COMPONENTS_OMNIBOX_BROWSER_FUSEBOX_ACTION_MOJOM_DATA_VIEW_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/string_data_view.h"
#include "mojo/public/cpp/bindings/lib/serialization.h"

#include "components/omnibox/browser/fusebox_action.mojom-shared-internal.h"
#include "components/omnibox/composebox/composebox_query.mojom-shared.h"


namespace fusebox_action::mojom {
class FuseboxActionDataView;



}  // fusebox_action::mojom


namespace mojo {
namespace internal {

template <>
struct MojomTypeTraits<::fusebox_action::mojom::FuseboxActionDataView> {
  using Data = ::fusebox_action::mojom::internal::FuseboxAction_Data;
  using DataAsArrayElement = Pointer<Data>;
  static constexpr MojomTypeCategory category = MojomTypeCategory::kStruct;
};

}  // namespace internal
}  // namespace mojo


namespace fusebox_action::mojom {


enum class SuggestInventory : int32_t {
  
  kDefault = 0,
  
  kTravel = 1,
  
  kAimTakeover = 2,
  
  kImageGenTakeover = 3,
  
  kConversationStarters = 4,
  
  kAiHpCreateChip = 5,
  
  kAiHpGetItDoneChip = 6,
  
  kAiHpSimplifyChip = 7,
  
  kAiHpIfl = 8,
  
  kAiHpReservations = 9,
  
  kBrainstorm = 10,
  
  kHelpMeLearn = 11,
  
  kWriteOrEdit = 12,
  
  kAddFile = 13,
  
  kAddTab = 14,
  
  kAimImages = 15,
  kMinValue = 0,
  kMaxValue = 15,
};

 std::ostream& operator<<(std::ostream& os, SuggestInventory value);
inline bool IsKnownEnumValue(SuggestInventory value) {
  return internal::SuggestInventory_Data::IsKnownValue(
      static_cast<int32_t>(value));
}

// Returns true if the enum has an infallible conversion from the mojom enum.
consteval bool HasInfallibleConversion(SuggestInventory) {
  return true;
}


enum class QueryActionOverride : int32_t {
  
  kDefault = 0,
  
  kPaste = 1,
  
  kHint = 2,
  kMinValue = 0,
  kMaxValue = 2,
};

 std::ostream& operator<<(std::ostream& os, QueryActionOverride value);
inline bool IsKnownEnumValue(QueryActionOverride value) {
  return internal::QueryActionOverride_Data::IsKnownValue(
      static_cast<int32_t>(value));
}

// Returns true if the enum has an infallible conversion from the mojom enum.
consteval bool HasInfallibleConversion(QueryActionOverride) {
  return true;
}


enum class InputSource : int32_t {
  
  kInputSourceUnspecified = 0,
  
  kInputSourceGallery = 1,
  
  kInputSourceCamera = 2,
  
  kInputSourceFilePicker = 3,
  
  kInputSourceDrive = 4,
  
  kInputSourceTabPicker = 5,
  
  kInputSourceVoice = 6,
  kMinValue = 0,
  kMaxValue = 6,
};

 std::ostream& operator<<(std::ostream& os, InputSource value);
inline bool IsKnownEnumValue(InputSource value) {
  return internal::InputSource_Data::IsKnownValue(
      static_cast<int32_t>(value));
}

// Returns true if the enum has an infallible conversion from the mojom enum.
consteval bool HasInfallibleConversion(InputSource) {
  return true;
}


enum class SearchboxOverride : int32_t {
  
  kUnspecified = 0,
  
  kRealbox = 1,
  
  kComposebox = 2,
  kMinValue = 0,
  kMaxValue = 2,
};

 std::ostream& operator<<(std::ostream& os, SearchboxOverride value);
inline bool IsKnownEnumValue(SearchboxOverride value) {
  return internal::SearchboxOverride_Data::IsKnownValue(
      static_cast<int32_t>(value));
}

// Returns true if the enum has an infallible conversion from the mojom enum.
consteval bool HasInfallibleConversion(SearchboxOverride) {
  return true;
}


class FuseboxActionDataView {
 public:
  FuseboxActionDataView() = default;

  FuseboxActionDataView(
      internal::FuseboxAction_Data* data,
      mojo::Message* message)
      : data_(data) {}

  bool is_null() const { return !data_; }
  template <typename UserType>
  [[nodiscard]] bool ReadPreselectedTool(UserType* output) const {
    if (!data_->preselected_tool_$flag) {
      *output = std::nullopt;
      return true;
    }

    return mojo::internal::Deserialize<::composebox_query::mojom::ToolMode>(
        data_->preselected_tool_$value, &output->emplace());
  }
  std::optional<::composebox_query::mojom::ToolMode> preselected_tool() const {
    if (!data_->preselected_tool_$flag) {
      return std::nullopt;
    }
    return ::mojo::internal::ToKnownEnumValueHelper(
          static_cast<::composebox_query::mojom::ToolMode>(data_->preselected_tool_$value));
  }
  template <typename UserType>
  [[nodiscard]] bool ReadPreferredInventory(UserType* output) const {
    if (!data_->preferred_inventory_$flag) {
      *output = std::nullopt;
      return true;
    }

    return mojo::internal::Deserialize<::fusebox_action::mojom::SuggestInventory>(
        data_->preferred_inventory_$value, &output->emplace());
  }
  std::optional<SuggestInventory> preferred_inventory() const {
    if (!data_->preferred_inventory_$flag) {
      return std::nullopt;
    }
    return ::mojo::internal::ToKnownEnumValueHelper(
          static_cast<::fusebox_action::mojom::SuggestInventory>(data_->preferred_inventory_$value));
  }
  template <typename UserType>
  [[nodiscard]] bool ReadPreselectedModel(UserType* output) const {
    if (!data_->preselected_model_$flag) {
      *output = std::nullopt;
      return true;
    }

    return mojo::internal::Deserialize<::composebox_query::mojom::ModelMode>(
        data_->preselected_model_$value, &output->emplace());
  }
  std::optional<::composebox_query::mojom::ModelMode> preselected_model() const {
    if (!data_->preselected_model_$flag) {
      return std::nullopt;
    }
    return ::mojo::internal::ToKnownEnumValueHelper(
          static_cast<::composebox_query::mojom::ModelMode>(data_->preselected_model_$value));
  }
  template <typename UserType>
  [[nodiscard]] bool ReadQueryActionOverride(UserType* output) const {
    if (!data_->query_action_override_$flag) {
      *output = std::nullopt;
      return true;
    }

    return mojo::internal::Deserialize<::fusebox_action::mojom::QueryActionOverride>(
        data_->query_action_override_$value, &output->emplace());
  }
  std::optional<QueryActionOverride> query_action_override() const {
    if (!data_->query_action_override_$flag) {
      return std::nullopt;
    }
    return ::mojo::internal::ToKnownEnumValueHelper(
          static_cast<::fusebox_action::mojom::QueryActionOverride>(data_->query_action_override_$value));
  }
  template <typename UserType>
  [[nodiscard]] bool ReadPreselectedInputSource(UserType* output) const {
    if (!data_->preselected_input_source_$flag) {
      *output = std::nullopt;
      return true;
    }

    return mojo::internal::Deserialize<::fusebox_action::mojom::InputSource>(
        data_->preselected_input_source_$value, &output->emplace());
  }
  std::optional<InputSource> preselected_input_source() const {
    if (!data_->preselected_input_source_$flag) {
      return std::nullopt;
    }
    return ::mojo::internal::ToKnownEnumValueHelper(
          static_cast<::fusebox_action::mojom::InputSource>(data_->preselected_input_source_$value));
  }
  template <typename UserType>
  [[nodiscard]] bool ReadSearchboxOverride(UserType* output) const {
    if (!data_->searchbox_override_$flag) {
      *output = std::nullopt;
      return true;
    }

    return mojo::internal::Deserialize<::fusebox_action::mojom::SearchboxOverride>(
        data_->searchbox_override_$value, &output->emplace());
  }
  std::optional<SearchboxOverride> searchbox_override() const {
    if (!data_->searchbox_override_$flag) {
      return std::nullopt;
    }
    return ::mojo::internal::ToKnownEnumValueHelper(
          static_cast<::fusebox_action::mojom::SearchboxOverride>(data_->searchbox_override_$value));
  }
 private:
  internal::FuseboxAction_Data* data_ = nullptr;
};


}  // fusebox_action::mojom

#endif  // COMPONENTS_OMNIBOX_BROWSER_FUSEBOX_ACTION_MOJOM_DATA_VIEW_H_