6 #ifndef IROHA_LIBS_TO_STRING_HPP 7 #define IROHA_LIBS_TO_STRING_HPP 13 #include <string_view> 15 #include <boost/optional.hpp> 30 inline std::string
toString(std::string
const &o) {
34 inline std::string
toString(std::string_view o) {
35 return std::string{o};
39 inline auto toString(
const T &o) -> std::enable_if_t<
40 std::is_same<decltype(std::to_string(o)), std::string>::value,
42 return std::to_string(o);
46 inline auto toString(
const T &o) -> std::enable_if_t<
47 std::is_same<
typename std::decay_t<decltype(o.toString())>,
53 template <
typename... T>
54 inline std::string
toString(
const std::reference_wrapper<T...> &o) {
58 template <
typename... T>
59 inline std::string
toString(
const std::optional<T...> &o) {
63 template <
typename... T>
64 inline std::string
toString(
const std::unique_ptr<T...> &o) {
68 template <
typename... T>
69 inline std::string
toString(
const std::shared_ptr<T...> &o) {
79 inline auto toString(
const T &o) -> std::enable_if_t<
80 boost::optional_detail::is_optional_related<T>::value,
86 template <
typename T,
typename = decltype(*std::declval<T>().begin())>
89 bool need_field_separator =
false;
91 if (need_field_separator) {
95 need_field_separator =
true;
103 template <
typename T>
113 inline std::string toStringDereferenced<boost::none_t>(
114 const boost::none_t &) {
119 inline std::string toStringDereferenced<std::nullopt_t>(
120 const std::nullopt_t &) {
const std::string kSingleFieldsSeparator
Definition: to_string.hpp:22
std::string toString(const T &c)
Print a plain collection.
Definition: to_string.hpp:87
const std::string kNotSet
Definition: to_string.hpp:23
const std::string kEndBlockMarker
Definition: to_string.hpp:21
Definition: block_query.hpp:15
std::string toString(const ::iroha::utility_service::Status &val)
Definition: proto_status_tools.cpp:56
std::string toStringDereferenced(const T &o)
Print pointers and optionals.
Definition: to_string.hpp:104
const std::string kBeginBlockMarker
Definition: to_string.hpp:20