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

#include "BoundingVolumeJsonHandler.h"
#include "ContentJsonHandler.h"
#include "ImplicitTilingJsonHandler.h"
#include "MetadataEntityJsonHandler.h"

#include <Cesium3DTiles/Tile.h>
#include <CesiumJsonReader/ArrayJsonHandler.h>
#include <CesiumJsonReader/DoubleJsonHandler.h>
#include <CesiumJsonReader/ExtensibleObjectJsonHandler.h>
#include <CesiumJsonReader/StringJsonHandler.h>

namespace CesiumJsonReader {
class ExtensionReaderContext;
}

namespace Cesium3DTilesReader {
class TileJsonHandler : public CesiumJsonReader::ExtensibleObjectJsonHandler {
public:
  using ValueType = Cesium3DTiles::Tile;

  TileJsonHandler(
      const CesiumJsonReader::ExtensionReaderContext& context) noexcept;
  void reset(IJsonHandler* pParentHandler, Cesium3DTiles::Tile* pObject);

  virtual IJsonHandler* readObjectKey(const std::string_view& str) override;

protected:
  IJsonHandler* readObjectKeyTile(
      const std::string& objectType,
      const std::string_view& str,
      Cesium3DTiles::Tile& o);

private:
  Cesium3DTiles::Tile* _pObject = nullptr;
  BoundingVolumeJsonHandler _boundingVolume;
  BoundingVolumeJsonHandler _viewerRequestVolume;
  CesiumJsonReader::DoubleJsonHandler _geometricError;
  CesiumJsonReader::StringJsonHandler _refine;
  CesiumJsonReader::
      ArrayJsonHandler<double, CesiumJsonReader::DoubleJsonHandler>
          _transform;
  ContentJsonHandler _content;
  CesiumJsonReader::ArrayJsonHandler<Cesium3DTiles::Content, ContentJsonHandler>
      _contents;
  MetadataEntityJsonHandler _metadata;
  ImplicitTilingJsonHandler _implicitTiling;
  CesiumJsonReader::ArrayJsonHandler<Cesium3DTiles::Tile, TileJsonHandler>
      _children;
};
} // namespace Cesium3DTilesReader
