X-Git-Url: https://git.stg.codes/stg.git/blobdiff_plain/dd1e2e08e0cf4010c4e2d12c229f1698322102d2..a91e9542b384905187890f161d4da5396996fcfd:/projects/sgconf/config.h diff --git a/projects/sgconf/config.h b/projects/sgconf/config.h index e7984783..6c259334 100644 --- a/projects/sgconf/config.h +++ b/projects/sgconf/config.h @@ -18,43 +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() = default; + CONFIG(const CONFIG&) = default; + CONFIG(CONFIG&&) = default; + + CONFIG& operator=(const CONFIG&) = delete; + CONFIG& operator=(CONFIG&&) = delete; + + void splice(const CONFIG & rhs) noexcept + { + 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