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 }