userver: userver/storages/postgres/io/nullable_traits.hpp Source File
Loading...
Searching...
No Matches
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