X-Git-Url: https://git.stg.codes/stg.git/blobdiff_plain/b3139bf3f37b3b0244efea8b4b5e5a7d0bc90095..16e9905f82947dd471c09382122d8150ba6fda1a:/projects/sgconf/config.h diff --git a/projects/sgconf/config.h b/projects/sgconf/config.h index 9ec9616e..6c259334 100644 --- a/projects/sgconf/config.h +++ b/projects/sgconf/config.h @@ -18,58 +18,67 @@ * Author : Maxim Mamontov */ -#ifndef __STG_SGCONF_CONFIG_H__ -#define __STG_SGCONF_CONFIG_H__ +#pragma once +#include "stg/splice.h" #include "stg/common.h" -#include "stg/resetable.h" -#include "stg/os_int.h" #include +#include +#include namespace SGCONF { struct CONFIG { - RESETABLE configFile; - RESETABLE server; - RESETABLE port; - RESETABLE userName; - RESETABLE userPass; + std::optional configFile; + std::optional server; + std::optional port; + std::optional localAddress; + std::optional localPort; + std::optional userName; + std::optional userPass; + std::optional showConfig; - CONFIG & operator=(const CONFIG & rhs) + CONFIG() = default; + CONFIG(const CONFIG&) = default; + CONFIG(CONFIG&&) = default; + + CONFIG& operator=(const CONFIG&) = delete; + CONFIG& operator=(CONFIG&&) = delete; + + void splice(const CONFIG & rhs) noexcept { - if (!rhs.configFile.empty()) - configFile = rhs.configFile; - if (!rhs.server.empty()) - server = rhs.server; - if (!rhs.port.empty()) - port = rhs.port; - if (!rhs.userName.empty()) - userName = rhs.userName; - if (!rhs.userPass.empty()) - userPass = rhs.userPass; - return *this; + STG::splice(configFile, rhs.configFile); + STG::splice(server, rhs.server); + STG::splice(port, rhs.port); + STG::splice(localAddress, rhs.localAddress); + STG::splice(localPort, rhs.localPort); + STG::splice(userName, rhs.userName); + STG::splice(userPass, rhs.userPass); + STG::splice(showConfig, rhs.showConfig); } std::string Serialize() const { - std::string res("{ "); - if (!configFile.empty()) - res += "configFile: '" + configFile.data() + "'"; - if (!server.empty()) - res += ", server: '" + server.data() + "'"; - if (!port.empty()) - res += ", port: " + x2str(port.data()); - if (!userName.empty()) - res += ", userName: '" + userName.data() + "'"; - if (!userPass.empty()) - res += ", userPass: '" + userPass.data() + "'"; - return res + " }"; + std::string res; + if (configFile) + res += "configFile: '" + configFile.value() + "'\n"; + if (server) + res += "server: '" + server.value() + "'\n"; + if (port) + res += "port: " + std::to_string(port.value()) + "\n"; + if (localAddress) + res += "local address: '" + localAddress.value() + "'\n"; + if (localPort) + res += "local port: " + std::to_string(localPort.value()) + "\n"; + if (userName) + res += "userName: '" + userName.value() + "'\n"; + if (userPass) + res += "userPass: '" + userPass.value() + "\n"; + return res; } }; -} - -#endif +} // namespace SGCONF