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

#include "CesiumGltf/ExtensionExtStructuralMetadataPropertyAttribute.h"
#include "CesiumGltf/ExtensionExtStructuralMetadataPropertyTable.h"
#include "CesiumGltf/ExtensionExtStructuralMetadataPropertyTexture.h"
#include "CesiumGltf/ExtensionExtStructuralMetadataSchema.h"
#include "CesiumGltf/Library.h"

#include <CesiumUtility/ExtensibleObject.h>

#include <optional>
#include <string>
#include <vector>

namespace CesiumGltf {
/**
 * @brief glTF extension that provides structural metadata about vertices,
 * texels, and features in a glTF asset.
 */
struct CESIUMGLTF_API ExtensionModelExtStructuralMetadata final
    : public CesiumUtility::ExtensibleObject {
  static inline constexpr const char* TypeName =
      "ExtensionModelExtStructuralMetadata";
  static inline constexpr const char* ExtensionName = "EXT_structural_metadata";

  /**
   * @brief An object defining classes and enums.
   */
  std::optional<CesiumGltf::ExtensionExtStructuralMetadataSchema> schema;

  /**
   * @brief The URI (or IRI) of the external schema file.
   */
  std::optional<std::string> schemaUri;

  /**
   * @brief An array of property table definitions, which may be referenced by
   * index.
   */
  std::vector<CesiumGltf::ExtensionExtStructuralMetadataPropertyTable>
      propertyTables;

  /**
   * @brief An array of property texture definitions, which may be referenced by
   * index.
   */
  std::vector<CesiumGltf::ExtensionExtStructuralMetadataPropertyTexture>
      propertyTextures;

  /**
   * @brief An array of property attribute definitions, which may be referenced
   * by index.
   */
  std::vector<CesiumGltf::ExtensionExtStructuralMetadataPropertyAttribute>
      propertyAttributes;
};
} // namespace CesiumGltf
