lintel 0.2.0
Loading...
Searching...
No Matches
StringifyService.h
Go to the documentation of this file.
1#ifndef LOGGING_STRINGIFYSERVICE_H
2#define LOGGING_STRINGIFYSERVICE_H
3
4#include <chrono>
5#include <string>
6#include <type_traits>
7
9
10namespace lintel {
12template<class T> class StringifyService
13{
14public:
19 static std::string serializeToString(const T &value)
20 {
21 if constexpr (std::is_same_v<T, std::string>) {
22 return value;
23 } else if constexpr (std::is_same_v<T, bool>) {
24 return value ? "true" : "false";
25 } else if constexpr (std::is_arithmetic_v<T>) {
26 return std::to_string(value);
27 } else if constexpr (std::is_same_v<T, std::chrono::sys_time<std::chrono::microseconds>>) {
28 return datetime::formatSystemTime(value);
29 } else if constexpr (std::is_same_v<T, std::chrono::milliseconds> || std::is_same_v<T, std::chrono::seconds>
30 || std::is_same_v<T, std::chrono::minutes>) {
31 return std::to_string(value.count());
32 }
33 }
34
39 static T deserializeFromString(const std::string &string)
40 {
41 if constexpr (std::is_same_v<T, std::string>) {
42 return string;
43 } else if constexpr (std::is_same_v<T, bool>) {
44 return string == "true";
45 } else if constexpr (std::is_integral_v<T> && std::is_signed_v<T>) {
46 return static_cast<T>(std::stoll(string));
47 } else if constexpr (std::is_integral_v<T> && std::is_unsigned_v<T>) {
48 return static_cast<T>(std::stoull(string));
49 } else if constexpr (std::is_same_v<T, float>) {
50 return std::stof(string);
51 } else if constexpr (std::is_same_v<T, double>) {
52 return std::stod(string);
53 } else if constexpr (std::is_same_v<T, std::chrono::sys_time<std::chrono::microseconds>>) {
54 return datetime::parseSystemTime(string);
55 } else if constexpr (std::is_same_v<T, std::chrono::milliseconds>) {
56 return std::chrono::milliseconds(std::stoull(string));
57 } else if constexpr (std::is_same_v<T, std::chrono::seconds>) {
58 return std::chrono::seconds(std::stoull(string));
59 } else if constexpr (std::is_same_v<T, std::chrono::minutes>) {
60 return std::chrono::minutes(std::stoull(string));
61 }
62 }
63};
64
65}// namespace lintel
66#endif// LOGGING_STRINGIFYSERVICE_H
Definition StringifyService.h:13
static T deserializeFromString(const std::string &string)
Definition StringifyService.h:39
static std::string serializeToString(const T &value)
Definition StringifyService.h:19
SystemTime parseSystemTime(const std::string &value)
Definition DateTimeFormat.h:126
std::string formatSystemTime(const SystemTime &value, char dateSeparator='-')
Definition DateTimeFormat.h:91
Definition BaseFeature.h:6
constexpr std::string_view type_name()
Definition TypeName.h:9