YoggieEngine/Editor/src/Project/Project.cpp

66 lines
1.4 KiB
C++
Raw Normal View History

#include "Project.h"
#include <string>
#include <sstream>
#include <fstream>
#include <iostream>
#include <yaml-cpp/yaml.h>
void Project::SaveProject(std::filesystem::path path, Project& project)
{
YAML::Emitter projectYAML;
2022-11-05 12:47:37 +00:00
projectYAML << YAML::BeginMap;
projectYAML << YAML::Key << "Project" << YAML::Value << project.Name;
projectYAML << YAML::Key << "Directory" << YAML::Value << path.parent_path().u8string();
projectYAML << YAML::EndMap;
std::ofstream projectFile;
projectFile.open(path.u8string());
projectFile << projectYAML.c_str();
projectFile.close();
}
2022-11-05 12:47:37 +00:00
void Project::LoadProject(std::filesystem::path path, std::shared_ptr<Project>& project)
{
std::string YAMLProject;
std::stringstream sstream;
std::ifstream projectFile;
projectFile.open(path.u8string());
sstream << projectFile.rdbuf();
YAMLProject = sstream.str();
projectFile.close();
2022-11-05 12:47:37 +00:00
YAML::Node node = YAML::Load(YAMLProject);
// this is probably not perfect but it seems to work for now
project.reset();
project = std::make_shared<Project>(node.as<Project>());
std::cout << "loading..." << project.get()->Name << std::endl;
2022-11-05 12:47:37 +00:00
}
namespace YAML {
template<>
class convert<Project> {
public:
static bool decode(const Node& node , Project& rhs)
{
if (!node.IsMap())
return false;
rhs.setName(node["Project"].as<std::string>());
rhs.setProjectDirectory(node["Directory"].as<std::string>());
2022-11-05 16:17:08 +00:00
return true;
2022-11-05 12:47:37 +00:00
}
};
}