userver: userver/storages/postgres/io/nullable_traits.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
nullable_traits.hpp
1#pragma once
2
3#include <type_traits>
4
5#include <userver/compiler/demangle.hpp>
6#include <userver/storages/postgres/exceptions.hpp>
7
8USERVER_NAMESPACE_BEGIN
9
10namespace storages::postgres::io::traits {
11
12/// @brief Metafunction to detect nullability of a type.
13template <typename T>
14struct IsNullable : std::false_type {};
15template <typename T>
16inline constexpr bool kIsNullable = IsNullable<T>::value;
17
18template <typename T>
19struct GetSetNull {
20 inline static bool IsNull(const T&) { return false; }
21 inline static void SetNull(T&) {
22 // TODO Consider a static_assert here
23 throw TypeCannotBeNull(compiler::GetTypeName<T>());
24 }
25 inline static void SetDefault(T& value) { value = T{}; }
26};
27
28} // namespace storages::postgres::io::traits
29
30USERVER_NAMESPACE_END