#ifndef GODOT_VARIANT_H_ED7F2EB6
#define GODOT_VARIANT_H_ED7F2EB6

#include <string>
#include <variant>
#include <vector>

struct GodotVariant {
  using value_type = std::variant<std::monostate, bool, std::vector<std::string>, std::vector<GodotVariant>>;

  value_type value;

  GodotVariant(value_type v) : value(v) {}

  bool AsBool() const { return std::get<bool>(value); }

  const std::vector<std::string>& AsNodePath() const {
    return std::get<std::vector<std::string>>(value);
  }

  const std::vector<GodotVariant>& AsArray() const {
    return std::get<std::vector<GodotVariant>>(value);
  }
};

GodotVariant ParseGodotFile(std::string filename);

#endif /* end of include guard: GODOT_VARIANT_H_ED7F2EB6 */