userver: userver/utils/optionals.hpp Source File
Loading...
Searching...
No Matches
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