userver: userver/utils/optionals.hpp Source File
⚠️ This is the documentation for an old userver version. Click here to switch to the latest version.
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages Concepts
optionals.hpp
Go to the documentation of this file.
1#pragma once
2
3/// @file userver/utils/optionals.hpp
4/// @brief Helper functions for std optionals
5/// @ingroup userver_universal
6
7#include <optional>
8#include <string>
9#include <utility>
10
11#include <fmt/compile.h>
12#include <fmt/format.h>
13
14USERVER_NAMESPACE_BEGIN
15
16namespace utils {
17
18/// Converts std::optional to a string, empty value represented as "--"
19template <class T>
20std::string ToString(const std::optional<T>& from) {
21 return from ? fmt::format(FMT_COMPILE(" {}"), *from) : "--";
22}
23
24/// A polyfill for C++23 monadic operations for `std::optional`.
25template <typename T, typename Func>
26auto OptionalTransform(T&& opt, Func func)
27 -> std::optional<decltype(std::move(func)(*std::forward<T>(opt)))> {
28 if (opt) return std::move(func)(*std::forward<T>(opt));
29 return std::nullopt;
30}
31
32} // namespace utils
33
34USERVER_NAMESPACE_END