// services/webnn/public/mojom/webnn_context_properties.mojom-shared-internal.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 SERVICES_WEBNN_PUBLIC_MOJOM_WEBNN_CONTEXT_PROPERTIES_MOJOM_SHARED_INTERNAL_H_
#define SERVICES_WEBNN_PUBLIC_MOJOM_WEBNN_CONTEXT_PROPERTIES_MOJOM_SHARED_INTERNAL_H_
#include "mojo/public/cpp/bindings/lib/array_internal.h"
#include "mojo/public/cpp/bindings/lib/bindings_internal.h"
#include "mojo/public/cpp/bindings/lib/map_data_internal.h"
#include "mojo/public/cpp/bindings/lib/validation_errors.h"
#include "mojo/public/cpp/bindings/lib/message_fragment.h"
#include "mojo/public/cpp/bindings/lib/native_enum_data.h"
#include "mojo/public/interfaces/bindings/native_struct.mojom-shared-internal.h"
#include "base/component_export.h"



namespace mojo {
namespace internal {
class ValidationContext;
}
}


namespace webnn::mojom {
namespace internal {
class SupportedDataTypes_Data;
class SupportedRanks_Data;
class SupportedTensors_Data;
class DataTypeLimits_Data;
class ContextProperties_Data;

struct InputOperandLayout_Data {
 public:
  static bool constexpr kIsExtensible = false;

  static bool IsKnownValue(int32_t value) {
    switch (value) {
      case 0:
      case 1:
        return true;
    }
    return false;
  }

  static bool Validate(int32_t value,
                       mojo::internal::ValidationContext* validation_context) {
    if (kIsExtensible || IsKnownValue(value))
      return true;

    ReportValidationError(validation_context,
                          mojo::internal::VALIDATION_ERROR_UNKNOWN_ENUM_VALUE);
    return false;
  }
};

struct Resample2DAxes_Data {
 public:
  static bool constexpr kIsExtensible = false;

  static bool IsKnownValue(int32_t value) {
    switch (value) {
      case 0:
      case 1:
      case 2:
        return true;
    }
    return false;
  }

  static bool Validate(int32_t value,
                       mojo::internal::ValidationContext* validation_context) {
    if (kIsExtensible || IsKnownValue(value))
      return true;

    ReportValidationError(validation_context,
                          mojo::internal::VALIDATION_ERROR_UNKNOWN_ENUM_VALUE);
    return false;
  }
};

struct BatchNormalizationAxis_Data {
 public:
  static bool constexpr kIsExtensible = false;

  static bool IsKnownValue(int32_t value) {
    switch (value) {
      case 0:
      case 1:
        return true;
    }
    return false;
  }

  static bool Validate(int32_t value,
                       mojo::internal::ValidationContext* validation_context) {
    if (kIsExtensible || IsKnownValue(value))
      return true;

    ReportValidationError(validation_context,
                          mojo::internal::VALIDATION_ERROR_UNKNOWN_ENUM_VALUE);
    return false;
  }
};

#pragma pack(push, 1)
class COMPONENT_EXPORT(WEBNN_MOJOM_SHARED) SupportedDataTypes_Data {
 public:
  static bool Validate(const void* data,
                       mojo::internal::ValidationContext* validation_context);

  mojo::internal::StructHeader header_;
  uint8_t float32 : 1;
  uint8_t float16 : 1;
  uint8_t int32 : 1;
  uint8_t uint32 : 1;
  uint8_t int64 : 1;
  uint8_t uint64 : 1;
  uint8_t int8 : 1;
  uint8_t uint8 : 1;
  uint8_t int4 : 1;
  uint8_t uint4 : 1;
  uint8_t padfinal_[6];

 private:
  friend class mojo::internal::MessageFragment<SupportedDataTypes_Data>;

  SupportedDataTypes_Data();
  ~SupportedDataTypes_Data() = delete;
};
static_assert(sizeof(SupportedDataTypes_Data) == 16,
              "Bad sizeof(SupportedDataTypes_Data)");
// Used by SupportedDataTypes::WrapAsMessage to lazily serialize the struct.
template <typename UserType, typename DataView>
struct SupportedDataTypes_UnserializedMessageContext
    : public mojo::internal::UnserializedMessageContext {
 public:
  static const mojo::internal::UnserializedMessageContext::Tag kMessageTag;

  SupportedDataTypes_UnserializedMessageContext(
    uint32_t message_name,
    uint32_t message_flags,
    UserType input)
      : mojo::internal::UnserializedMessageContext(&kMessageTag, message_name, message_flags)
      , user_data_(std::move(input)) {}
  ~SupportedDataTypes_UnserializedMessageContext() override = default;

  UserType TakeData() {
    return std::move(user_data_);
  }

 private:
  // mojo::internal::UnserializedMessageContext:
  void Serialize(mojo::Message& message) override {
    mojo::internal::MessageFragment<SupportedDataTypes_Data> fragment(message);
    mojo::internal::Serialize<DataView>(user_data_, fragment);
  }

  UserType user_data_;
};

template <typename UserType, typename DataView>
const mojo::internal::UnserializedMessageContext::Tag
    SupportedDataTypes_UnserializedMessageContext<UserType, DataView>::kMessageTag = {};
class COMPONENT_EXPORT(WEBNN_MOJOM_SHARED) SupportedRanks_Data {
 public:
  static bool Validate(const void* data,
                       mojo::internal::ValidationContext* validation_context);

  mojo::internal::StructHeader header_;
  uint32_t min;
  uint32_t max;

 private:
  friend class mojo::internal::MessageFragment<SupportedRanks_Data>;

  SupportedRanks_Data();
  ~SupportedRanks_Data() = delete;
};
static_assert(sizeof(SupportedRanks_Data) == 16,
              "Bad sizeof(SupportedRanks_Data)");
// Used by SupportedRanks::WrapAsMessage to lazily serialize the struct.
template <typename UserType, typename DataView>
struct SupportedRanks_UnserializedMessageContext
    : public mojo::internal::UnserializedMessageContext {
 public:
  static const mojo::internal::UnserializedMessageContext::Tag kMessageTag;

  SupportedRanks_UnserializedMessageContext(
    uint32_t message_name,
    uint32_t message_flags,
    UserType input)
      : mojo::internal::UnserializedMessageContext(&kMessageTag, message_name, message_flags)
      , user_data_(std::move(input)) {}
  ~SupportedRanks_UnserializedMessageContext() override = default;

  UserType TakeData() {
    return std::move(user_data_);
  }

 private:
  // mojo::internal::UnserializedMessageContext:
  void Serialize(mojo::Message& message) override {
    mojo::internal::MessageFragment<SupportedRanks_Data> fragment(message);
    mojo::internal::Serialize<DataView>(user_data_, fragment);
  }

  UserType user_data_;
};

template <typename UserType, typename DataView>
const mojo::internal::UnserializedMessageContext::Tag
    SupportedRanks_UnserializedMessageContext<UserType, DataView>::kMessageTag = {};
class COMPONENT_EXPORT(WEBNN_MOJOM_SHARED) SupportedTensors_Data {
 public:
  static bool Validate(const void* data,
                       mojo::internal::ValidationContext* validation_context);

  mojo::internal::StructHeader header_;
  mojo::internal::Pointer<internal::SupportedDataTypes_Data> data_types;
  mojo::internal::Pointer<internal::SupportedRanks_Data> ranks;

 private:
  friend class mojo::internal::MessageFragment<SupportedTensors_Data>;

  SupportedTensors_Data();
  ~SupportedTensors_Data() = delete;
};
static_assert(sizeof(SupportedTensors_Data) == 24,
              "Bad sizeof(SupportedTensors_Data)");
// Used by SupportedTensors::WrapAsMessage to lazily serialize the struct.
template <typename UserType, typename DataView>
struct SupportedTensors_UnserializedMessageContext
    : public mojo::internal::UnserializedMessageContext {
 public:
  static const mojo::internal::UnserializedMessageContext::Tag kMessageTag;

  SupportedTensors_UnserializedMessageContext(
    uint32_t message_name,
    uint32_t message_flags,
    UserType input)
      : mojo::internal::UnserializedMessageContext(&kMessageTag, message_name, message_flags)
      , user_data_(std::move(input)) {}
  ~SupportedTensors_UnserializedMessageContext() override = default;

  UserType TakeData() {
    return std::move(user_data_);
  }

 private:
  // mojo::internal::UnserializedMessageContext:
  void Serialize(mojo::Message& message) override {
    mojo::internal::MessageFragment<SupportedTensors_Data> fragment(message);
    mojo::internal::Serialize<DataView>(user_data_, fragment);
  }

  UserType user_data_;
};

template <typename UserType, typename DataView>
const mojo::internal::UnserializedMessageContext::Tag
    SupportedTensors_UnserializedMessageContext<UserType, DataView>::kMessageTag = {};
class COMPONENT_EXPORT(WEBNN_MOJOM_SHARED) DataTypeLimits_Data {
 public:
  static bool Validate(const void* data,
                       mojo::internal::ValidationContext* validation_context);

  mojo::internal::StructHeader header_;
  mojo::internal::Pointer<internal::SupportedTensors_Data> input;
  mojo::internal::Pointer<internal::SupportedTensors_Data> constant;
  mojo::internal::Pointer<internal::SupportedTensors_Data> arg_min_max_input;
  mojo::internal::Pointer<internal::SupportedTensors_Data> arg_min_max_output;
  mojo::internal::Pointer<internal::SupportedTensors_Data> batch_normalization_input;
  mojo::internal::Pointer<internal::SupportedTensors_Data> batch_normalization_mean;
  mojo::internal::Pointer<internal::SupportedTensors_Data> cast_input;
  mojo::internal::Pointer<internal::SupportedTensors_Data> clamp_input;
  mojo::internal::Pointer<internal::SupportedTensors_Data> concat_inputs;
  mojo::internal::Pointer<internal::SupportedTensors_Data> conv2d_input;
  mojo::internal::Pointer<internal::SupportedTensors_Data> conv2d_bias;
  mojo::internal::Pointer<internal::SupportedTensors_Data> conv_transpose2d_input;
  mojo::internal::Pointer<internal::SupportedTensors_Data> conv_transpose2d_bias;
  mojo::internal::Pointer<internal::SupportedTensors_Data> cumulative_sum_input;
  mojo::internal::Pointer<internal::SupportedTensors_Data> dequantize_linear_input;
  mojo::internal::Pointer<internal::SupportedTensors_Data> dequantize_linear_scale;
  mojo::internal::Pointer<internal::SupportedTensors_Data> add_input;
  mojo::internal::Pointer<internal::SupportedTensors_Data> sub_input;
  mojo::internal::Pointer<internal::SupportedTensors_Data> mul_input;
  mojo::internal::Pointer<internal::SupportedTensors_Data> div_input;
  mojo::internal::Pointer<internal::SupportedTensors_Data> max_input;
  mojo::internal::Pointer<internal::SupportedTensors_Data> min_input;
  mojo::internal::Pointer<internal::SupportedTensors_Data> pow_input;
  mojo::internal::Pointer<internal::SupportedTensors_Data> equal_input;
  mojo::internal::Pointer<internal::SupportedTensors_Data> greater_input;
  mojo::internal::Pointer<internal::SupportedTensors_Data> greater_or_equal_input;
  mojo::internal::Pointer<internal::SupportedTensors_Data> lesser_input;
  mojo::internal::Pointer<internal::SupportedTensors_Data> lesser_or_equal_input;
  mojo::internal::Pointer<internal::SupportedTensors_Data> not_equal_input;
  mojo::internal::Pointer<internal::SupportedTensors_Data> logical_and_input;
  mojo::internal::Pointer<internal::SupportedTensors_Data> logical_or_input;
  mojo::internal::Pointer<internal::SupportedTensors_Data> logical_xor_input;
  mojo::internal::Pointer<internal::SupportedTensors_Data> logical_not_input;
  mojo::internal::Pointer<internal::SupportedTensors_Data> is_nan_input;
  mojo::internal::Pointer<internal::SupportedTensors_Data> is_infinite_input;
  mojo::internal::Pointer<internal::SupportedDataTypes_Data> logical_output;
  mojo::internal::Pointer<internal::SupportedTensors_Data> abs_input;
  mojo::internal::Pointer<internal::SupportedTensors_Data> ceil_input;
  mojo::internal::Pointer<internal::SupportedTensors_Data> cos_input;
  mojo::internal::Pointer<internal::SupportedTensors_Data> erf_input;
  mojo::internal::Pointer<internal::SupportedTensors_Data> exp_input;
  mojo::internal::Pointer<internal::SupportedTensors_Data> floor_input;
  mojo::internal::Pointer<internal::SupportedTensors_Data> identity_input;
  mojo::internal::Pointer<internal::SupportedTensors_Data> log_input;
  mojo::internal::Pointer<internal::SupportedTensors_Data> neg_input;
  mojo::internal::Pointer<internal::SupportedTensors_Data> reciprocal_input;
  mojo::internal::Pointer<internal::SupportedTensors_Data> round_even_input;
  mojo::internal::Pointer<internal::SupportedTensors_Data> sign_input;
  mojo::internal::Pointer<internal::SupportedTensors_Data> sin_input;
  mojo::internal::Pointer<internal::SupportedTensors_Data> sqrt_input;
  mojo::internal::Pointer<internal::SupportedTensors_Data> tan_input;
  mojo::internal::Pointer<internal::SupportedTensors_Data> elu_input;
  mojo::internal::Pointer<internal::SupportedTensors_Data> expand_input;
  mojo::internal::Pointer<internal::SupportedTensors_Data> gather_input;
  mojo::internal::Pointer<internal::SupportedTensors_Data> gather_indices;
  mojo::internal::Pointer<internal::SupportedTensors_Data> gather_elements_input;
  mojo::internal::Pointer<internal::SupportedTensors_Data> gather_elements_indices;
  mojo::internal::Pointer<internal::SupportedTensors_Data> gather_nd_input;
  mojo::internal::Pointer<internal::SupportedTensors_Data> gather_nd_indices;
  mojo::internal::Pointer<internal::SupportedTensors_Data> gelu_input;
  mojo::internal::Pointer<internal::SupportedTensors_Data> gemm_a;
  mojo::internal::Pointer<internal::SupportedTensors_Data> gemm_c;
  mojo::internal::Pointer<internal::SupportedTensors_Data> gru_input;
  mojo::internal::Pointer<internal::SupportedTensors_Data> gru_bias;
  mojo::internal::Pointer<internal::SupportedTensors_Data> gru_output_sequence;
  mojo::internal::Pointer<internal::SupportedTensors_Data> gru_cell_input;
  mojo::internal::Pointer<internal::SupportedTensors_Data> gru_cell_bias;
  mojo::internal::Pointer<internal::SupportedTensors_Data> hard_sigmoid_input;
  mojo::internal::Pointer<internal::SupportedTensors_Data> hard_swish_input;
  mojo::internal::Pointer<internal::SupportedTensors_Data> instance_normalization_input;
  mojo::internal::Pointer<internal::SupportedTensors_Data> instance_normalization_scale;
  mojo::internal::Pointer<internal::SupportedTensors_Data> layer_normalization_input;
  mojo::internal::Pointer<internal::SupportedTensors_Data> leaky_relu_input;
  mojo::internal::Pointer<internal::SupportedTensors_Data> linear_input;
  mojo::internal::Pointer<internal::SupportedTensors_Data> lstm_input;
  mojo::internal::Pointer<internal::SupportedTensors_Data> lstm_bias;
  mojo::internal::Pointer<internal::SupportedTensors_Data> lstm_output_sequence;
  mojo::internal::Pointer<internal::SupportedTensors_Data> lstm_cell_input;
  mojo::internal::Pointer<internal::SupportedTensors_Data> lstm_cell_bias;
  mojo::internal::Pointer<internal::SupportedTensors_Data> matmul_input;
  mojo::internal::Pointer<internal::SupportedTensors_Data> pad_input;
  mojo::internal::Pointer<internal::SupportedTensors_Data> average_pool2d_input;
  mojo::internal::Pointer<internal::SupportedTensors_Data> l2_pool2d_input;
  mojo::internal::Pointer<internal::SupportedTensors_Data> max_pool2d_input;
  mojo::internal::Pointer<internal::SupportedTensors_Data> prelu_input;
  mojo::internal::Pointer<internal::SupportedTensors_Data> quantize_linear_input;
  mojo::internal::Pointer<internal::SupportedTensors_Data> quantize_linear_zero_point;
  mojo::internal::Pointer<internal::SupportedTensors_Data> reduce_l1_input;
  mojo::internal::Pointer<internal::SupportedTensors_Data> reduce_l2_input;
  mojo::internal::Pointer<internal::SupportedTensors_Data> reduce_log_sum_input;
  mojo::internal::Pointer<internal::SupportedTensors_Data> reduce_log_sum_exp_input;
  mojo::internal::Pointer<internal::SupportedTensors_Data> reduce_max_input;
  mojo::internal::Pointer<internal::SupportedTensors_Data> reduce_mean_input;
  mojo::internal::Pointer<internal::SupportedTensors_Data> reduce_min_input;
  mojo::internal::Pointer<internal::SupportedTensors_Data> reduce_product_input;
  mojo::internal::Pointer<internal::SupportedTensors_Data> reduce_sum_input;
  mojo::internal::Pointer<internal::SupportedTensors_Data> reduce_sum_square_input;
  mojo::internal::Pointer<internal::SupportedTensors_Data> relu_input;
  mojo::internal::Pointer<internal::SupportedTensors_Data> resample2d_input;
  mojo::internal::Pointer<internal::SupportedTensors_Data> reshape_input;
  mojo::internal::Pointer<internal::SupportedTensors_Data> reverse_input;
  mojo::internal::Pointer<internal::SupportedTensors_Data> scatter_elements_input;
  mojo::internal::Pointer<internal::SupportedTensors_Data> scatter_elements_indices;
  mojo::internal::Pointer<internal::SupportedTensors_Data> scatter_nd_input;
  mojo::internal::Pointer<internal::SupportedTensors_Data> scatter_nd_indices;
  mojo::internal::Pointer<internal::SupportedTensors_Data> scatter_nd_updates;
  mojo::internal::Pointer<internal::SupportedTensors_Data> sigmoid_input;
  mojo::internal::Pointer<internal::SupportedTensors_Data> slice_input;
  mojo::internal::Pointer<internal::SupportedTensors_Data> softmax_input;
  mojo::internal::Pointer<internal::SupportedTensors_Data> softplus_input;
  mojo::internal::Pointer<internal::SupportedTensors_Data> softsign_input;
  mojo::internal::Pointer<internal::SupportedTensors_Data> split_input;
  mojo::internal::Pointer<internal::SupportedTensors_Data> tanh_input;
  mojo::internal::Pointer<internal::SupportedTensors_Data> tile_input;
  mojo::internal::Pointer<internal::SupportedTensors_Data> transpose_input;
  mojo::internal::Pointer<internal::SupportedTensors_Data> triangular_input;
  mojo::internal::Pointer<internal::SupportedTensors_Data> where_condition;
  mojo::internal::Pointer<internal::SupportedTensors_Data> where_value;

 private:
  friend class mojo::internal::MessageFragment<DataTypeLimits_Data>;

  DataTypeLimits_Data();
  ~DataTypeLimits_Data() = delete;
};
static_assert(sizeof(DataTypeLimits_Data) == 952,
              "Bad sizeof(DataTypeLimits_Data)");
// Used by DataTypeLimits::WrapAsMessage to lazily serialize the struct.
template <typename UserType, typename DataView>
struct DataTypeLimits_UnserializedMessageContext
    : public mojo::internal::UnserializedMessageContext {
 public:
  static const mojo::internal::UnserializedMessageContext::Tag kMessageTag;

  DataTypeLimits_UnserializedMessageContext(
    uint32_t message_name,
    uint32_t message_flags,
    UserType input)
      : mojo::internal::UnserializedMessageContext(&kMessageTag, message_name, message_flags)
      , user_data_(std::move(input)) {}
  ~DataTypeLimits_UnserializedMessageContext() override = default;

  UserType TakeData() {
    return std::move(user_data_);
  }

 private:
  // mojo::internal::UnserializedMessageContext:
  void Serialize(mojo::Message& message) override {
    mojo::internal::MessageFragment<DataTypeLimits_Data> fragment(message);
    mojo::internal::Serialize<DataView>(user_data_, fragment);
  }

  UserType user_data_;
};

template <typename UserType, typename DataView>
const mojo::internal::UnserializedMessageContext::Tag
    DataTypeLimits_UnserializedMessageContext<UserType, DataView>::kMessageTag = {};
class COMPONENT_EXPORT(WEBNN_MOJOM_SHARED) ContextProperties_Data {
 public:
  static bool Validate(const void* data,
                       mojo::internal::ValidationContext* validation_context);

  mojo::internal::StructHeader header_;
  int32_t input_operand_layout;
  int32_t resample_2d_axes;
  int32_t batch_normalization_axis;
  uint8_t pad2_[4];
  uint64_t tensor_byte_length_limit;
  mojo::internal::Pointer<internal::DataTypeLimits_Data> data_type_limits;

 private:
  friend class mojo::internal::MessageFragment<ContextProperties_Data>;

  ContextProperties_Data();
  ~ContextProperties_Data() = delete;
};
static_assert(sizeof(ContextProperties_Data) == 40,
              "Bad sizeof(ContextProperties_Data)");
// Used by ContextProperties::WrapAsMessage to lazily serialize the struct.
template <typename UserType, typename DataView>
struct ContextProperties_UnserializedMessageContext
    : public mojo::internal::UnserializedMessageContext {
 public:
  static const mojo::internal::UnserializedMessageContext::Tag kMessageTag;

  ContextProperties_UnserializedMessageContext(
    uint32_t message_name,
    uint32_t message_flags,
    UserType input)
      : mojo::internal::UnserializedMessageContext(&kMessageTag, message_name, message_flags)
      , user_data_(std::move(input)) {}
  ~ContextProperties_UnserializedMessageContext() override = default;

  UserType TakeData() {
    return std::move(user_data_);
  }

 private:
  // mojo::internal::UnserializedMessageContext:
  void Serialize(mojo::Message& message) override {
    mojo::internal::MessageFragment<ContextProperties_Data> fragment(message);
    mojo::internal::Serialize<DataView>(user_data_, fragment);
  }

  UserType user_data_;
};

template <typename UserType, typename DataView>
const mojo::internal::UnserializedMessageContext::Tag
    ContextProperties_UnserializedMessageContext<UserType, DataView>::kMessageTag = {};

#pragma pack(pop)

}  // namespace internal

}  // webnn::mojom

#endif  // SERVICES_WEBNN_PUBLIC_MOJOM_WEBNN_CONTEXT_PROPERTIES_MOJOM_SHARED_INTERNAL_H_