#include #include "settings.hpp" #include "logger/logger_set.hpp" namespace smtp::file { Settings::Settings( std::string const& path_file ) : mPathFile( path_file ) { } manage::SettingsFields Settings::Read() const { auto parsed_store = GetParsedStore(); return converter::Full{}.Convert( parsed_store ); } bool Settings::Write( manage::SettingsFields const& settings_fields ) const { auto parsed_data = converter::Full{}.Convert( settings_fields ); return SetParsedData( parsed_data ); } ParsedStoreType Settings::GetParsedStore() const { std::ifstream settings_file{mPathFile, std::fstream::in}; if( !settings_file.is_open()) { logger::LoggerSet::GetInstance()->LogError( "Unable to open file to read " + mPathFile ); return {}; } std::string line{}; ParsedStoreType result; while( std::getline( settings_file, line )) { auto parsed_data = parser::Settings{}.Parse( line ); result.insert( parsed_data ); } settings_file.close(); return result; } bool Settings::SetParsedData( ParsedStoreType const& parsed_data ) const { std::ofstream settings_file{mPathFile, std::fstream::out | std::fstream::trunc}; if( !settings_file.is_open()) { logger::LoggerSet::GetInstance()->LogError( "Unable to open file to write " + mPathFile ); return false; } for( const auto& data: parsed_data ) { auto line = BuildParam( data ); settings_file << line << "\n"; } settings_file.close(); return true; } std::string Settings::BuildParam( std::pair < std::string, std::string > const& data ) const { std::string result; result += data.first; result += '='; result += data.second; return result; } }