X-Git-Url: https://git.stg.codes/stg.git/blobdiff_plain/d8845c7819caac09b95c4cdf1e8d48cc1cb1b7a6..a91e9542b384905187890f161d4da5396996fcfd:/projects/sgconf/config.h?ds=inline diff --git a/projects/sgconf/config.h b/projects/sgconf/config.h index d3659a1d..6c259334 100644 --- a/projects/sgconf/config.h +++ b/projects/sgconf/config.h @@ -18,71 +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 localAddress; - RESETABLE localPort; - RESETABLE userName; - RESETABLE userPass; - RESETABLE showConfig; + 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.localAddress.empty()) - localAddress = rhs.localAddress; - if (!rhs.localPort.empty()) - localPort = rhs.localPort; - if (!rhs.userName.empty()) - userName = rhs.userName; - if (!rhs.userPass.empty()) - userPass = rhs.userPass; - if (!rhs.showConfig.empty()) - showConfig = rhs.showConfig; - 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() + "'\n"; - if (!server.empty()) - res += "server: '" + server.data() + "'\n"; - if (!port.empty()) - res += "port: " + x2str(port.data()) + "\n"; - if (!localAddress.empty()) - res += "local address: '" + localAddress.data() + "'\n"; - if (!localPort.empty()) - res += "local port: " + x2str(localPort.data()) + "\n"; - if (!userName.empty()) - res += "userName: '" + userName.data() + "'\n"; - if (!userPass.empty()) - res += "userPass: '" + userPass.data() + "\n"; + 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; } }; } // namespace SGCONF - -#endif