/ src / modules / Workspaces / WorkspacesLib / JsonUtils.cpp
JsonUtils.cpp
  1  #include "pch.h"
  2  #include "JsonUtils.h"
  3  
  4  #include <filesystem>
  5  
  6  #include <common/logger/logger.h>
  7  
  8  namespace JsonUtils
  9  {
 10      Result<WorkspacesData::WorkspacesProject, WorkspacesFileError> ReadSingleWorkspace(const std::wstring& fileName)
 11      {
 12          if (std::filesystem::exists(fileName))
 13          {
 14              try
 15              {
 16                  auto tempWorkspacesJson = json::from_file(fileName);
 17                  if (tempWorkspacesJson.has_value())
 18                  {
 19                      auto tempWorkspace = WorkspacesData::WorkspacesProjectJSON::FromJson(tempWorkspacesJson.value());
 20                      if (tempWorkspace.has_value())
 21                      {
 22                          return Ok(tempWorkspace.value());
 23                      }
 24                      else
 25                      {
 26                          Logger::critical("Incorrect Workspaces file");
 27                          return Error(WorkspacesFileError::IncorrectFileError);
 28                      }
 29                  }
 30                  else
 31                  {
 32                      Logger::critical("Incorrect Workspaces file");
 33                      return Error(WorkspacesFileError::IncorrectFileError);
 34                  }
 35              }
 36              catch (std::exception ex)
 37              {
 38                  Logger::critical("Exception on reading Workspaces file: {}", ex.what());
 39                  return Error(WorkspacesFileError::FileReadingError);
 40              }
 41          }
 42  
 43          return Ok(WorkspacesData::WorkspacesProject{});
 44      }
 45  
 46      Result<std::vector<WorkspacesData::WorkspacesProject>, WorkspacesFileError> ReadWorkspaces(const std::wstring& fileName)
 47      {
 48          try
 49          {
 50              auto savedWorkspacesJson = json::from_file(fileName);
 51              if (savedWorkspacesJson.has_value())
 52              {
 53                  auto savedWorkspaces = WorkspacesData::WorkspacesListJSON::FromJson(savedWorkspacesJson.value());
 54                  if (savedWorkspaces.has_value())
 55                  {
 56                      return Ok(savedWorkspaces.value());
 57                  }
 58                  else
 59                  {
 60                      Logger::critical("Incorrect Workspaces file");
 61                      return Error(WorkspacesFileError::IncorrectFileError);
 62                  }
 63              }
 64              else
 65              {
 66                  Logger::critical("Incorrect Workspaces file");
 67                  return Error(WorkspacesFileError::IncorrectFileError);
 68              }
 69          }
 70          catch (std::exception ex)
 71          {
 72              Logger::critical("Exception on reading Workspaces file: {}", ex.what());
 73              return Error(WorkspacesFileError::FileReadingError);
 74          }
 75      }
 76  
 77      bool Write(const std::wstring& fileName, const std::vector<WorkspacesData::WorkspacesProject>& projects)
 78      {
 79          try
 80          {
 81              json::to_file(fileName, WorkspacesData::WorkspacesListJSON::ToJson(projects));
 82          }
 83          catch (std::exception ex)
 84          {
 85              Logger::error("Error writing workspaces file. {}", ex.what());
 86              return false;
 87          }
 88  
 89          return true;
 90      }
 91  
 92      bool Write(const std::wstring& fileName, const WorkspacesData::WorkspacesProject& project)
 93      {
 94          try
 95          {
 96              json::to_file(fileName, WorkspacesData::WorkspacesProjectJSON::ToJson(project));
 97          }
 98          catch (std::exception ex)
 99          {
100              Logger::error("Error writing workspaces file. {}", ex.what());
101              return false;
102          }
103  
104          return true;
105      }
106  }