summaryrefslogtreecommitdiff
path: root/src/file/settings_converter.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/file/settings_converter.hpp')
-rw-r--r--src/file/settings_converter.hpp41
1 files changed, 41 insertions, 0 deletions
diff --git a/src/file/settings_converter.hpp b/src/file/settings_converter.hpp
new file mode 100644
index 0000000..36041c3
--- /dev/null
+++ b/src/file/settings_converter.hpp
@@ -0,0 +1,41 @@
+#pragma once
+
+#include <unordered_map>
+#include <string>
+
+namespace smtp::file
+{
+ struct SettingsFields
+ {
+ bool is_need_auth;
+ bool is_need_ssl;
+ std::string username;
+ std::string password;
+ std::string host;
+ std::string port;
+ };
+
+ using ParsedDataType = std::unordered_map<std::string, std::string>;;
+
+ class SettingsConverter
+ {
+ public:
+ SettingsConverter() = default;
+ ~SettingsConverter() = default;
+
+ SettingsFields Convert( std::unordered_map<std::string, std::string> const& from ) const;
+ std::unordered_map<std::string, std::string> Convert( SettingsFields const& from ) const;
+ private:
+ void ApplyAuth( SettingsFields& result, ParsedDataType const& from ) const;
+ void ApplySsl( SettingsFields& result, ParsedDataType const& from ) const;
+ void ApplyBool( ParsedDataType const& from, std::string const& search_field, bool& field ) const;
+
+ void ApplyUsername( SettingsFields& result, ParsedDataType const& from ) const;
+ void ApplyPassword( SettingsFields& result, ParsedDataType const& from ) const;
+ void ApplyHost( SettingsFields& result, ParsedDataType const& from ) const;
+ void ApplyPort( SettingsFields& result, ParsedDataType const& from ) const;
+ void ApplyString( ParsedDataType const& from, std::string const& search_field, std::string& field ) const;
+ };
+}
+
+