// This file was generated by generate-classes.
// DO NOT EDIT THIS FILE!
#pragma once

#include "CesiumGltf/ExtensionExtMeshFeaturesFeatureIdTexture.h"
#include "CesiumGltf/Library.h"

#include <CesiumUtility/ExtensibleObject.h>

#include <cstdint>
#include <optional>
#include <string>

namespace CesiumGltf {
/**
 * @brief Feature IDs stored in an attribute or texture.
 */
struct CESIUMGLTF_API ExtensionExtMeshFeaturesFeatureId final
    : public CesiumUtility::ExtensibleObject {
  static inline constexpr const char* TypeName =
      "ExtensionExtMeshFeaturesFeatureId";

  /**
   * @brief The number of unique features in the attribute or texture.
   */
  int64_t featureCount = int64_t();

  /**
   * @brief A value that indicates that no feature is associated with this
   * vertex or texel.
   */
  std::optional<int64_t> nullFeatureId;

  /**
   * @brief A label assigned to this feature ID set. Labels must be alphanumeric
   * identifiers matching the regular expression `^[a-zA-Z_][a-zA-Z0-9_]*$`.
   */
  std::optional<std::string> label;

  /**
   * @brief An integer value used to construct a string in the format
   * `_FEATURE_ID_<set index>` which is a reference to a key in
   * `mesh.primitives.attributes` (e.g. a value of `0` corresponds to
   * `_FEATURE_ID_0`).
   */
  std::optional<int64_t> attribute;

  /**
   * @brief A texture containing feature IDs.
   */
  std::optional<CesiumGltf::ExtensionExtMeshFeaturesFeatureIdTexture> texture;

  /**
   * @brief The index of the property table containing per-feature property
   * values. Only applicable when using the `EXT_structural_metadata` extension.
   */
  std::optional<int64_t> propertyTable;
};
} // namespace CesiumGltf
