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

// forward declarations
namespace CesiumJsonWriter {
class JsonWriter;
class ExtensionWriterContext;
} // namespace CesiumJsonWriter

// forward declarations
namespace Cesium3DTiles {
struct Extension3dTilesContentGltf;
struct Extension3dTilesBoundingVolumeS2;
struct Tileset;
struct Tile;
struct Content;
struct BoundingVolume;
struct Properties;
struct Asset;
} // namespace Cesium3DTiles

namespace Cesium3DTilesWriter {

struct Extension3dTilesContentGltfJsonWriter {
  using ValueType = Cesium3DTiles::Extension3dTilesContentGltf;

  static inline constexpr const char* ExtensionName = "3DTILES_content_gltf";

  static void write(
      const Cesium3DTiles::Extension3dTilesContentGltf& obj,
      CesiumJsonWriter::JsonWriter& jsonWriter,
      const CesiumJsonWriter::ExtensionWriterContext& context);
};

struct Extension3dTilesBoundingVolumeS2JsonWriter {
  using ValueType = Cesium3DTiles::Extension3dTilesBoundingVolumeS2;

  static inline constexpr const char* ExtensionName =
      "3DTILES_bounding_volume_S2";

  static void write(
      const Cesium3DTiles::Extension3dTilesBoundingVolumeS2& obj,
      CesiumJsonWriter::JsonWriter& jsonWriter,
      const CesiumJsonWriter::ExtensionWriterContext& context);
};

struct TilesetJsonWriter {
  using ValueType = Cesium3DTiles::Tileset;

  static void write(
      const Cesium3DTiles::Tileset& obj,
      CesiumJsonWriter::JsonWriter& jsonWriter,
      const CesiumJsonWriter::ExtensionWriterContext& context);
};

struct TileJsonWriter {
  using ValueType = Cesium3DTiles::Tile;

  static void write(
      const Cesium3DTiles::Tile& obj,
      CesiumJsonWriter::JsonWriter& jsonWriter,
      const CesiumJsonWriter::ExtensionWriterContext& context);
};

struct ContentJsonWriter {
  using ValueType = Cesium3DTiles::Content;

  static void write(
      const Cesium3DTiles::Content& obj,
      CesiumJsonWriter::JsonWriter& jsonWriter,
      const CesiumJsonWriter::ExtensionWriterContext& context);
};

struct BoundingVolumeJsonWriter {
  using ValueType = Cesium3DTiles::BoundingVolume;

  static void write(
      const Cesium3DTiles::BoundingVolume& obj,
      CesiumJsonWriter::JsonWriter& jsonWriter,
      const CesiumJsonWriter::ExtensionWriterContext& context);
};

struct PropertiesJsonWriter {
  using ValueType = Cesium3DTiles::Properties;

  static void write(
      const Cesium3DTiles::Properties& obj,
      CesiumJsonWriter::JsonWriter& jsonWriter,
      const CesiumJsonWriter::ExtensionWriterContext& context);
};

struct AssetJsonWriter {
  using ValueType = Cesium3DTiles::Asset;

  static void write(
      const Cesium3DTiles::Asset& obj,
      CesiumJsonWriter::JsonWriter& jsonWriter,
      const CesiumJsonWriter::ExtensionWriterContext& context);
};

void registerExtensions(CesiumJsonWriter::ExtensionWriterContext& context);

} // namespace Cesium3DTilesWriter
