userver: userver/storages/mysql/convert.hpp Source File
Loading...
Searching...
No Matches
convert.hpp
1#pragma once
2
3#include <type_traits>
4#include <utility>
5
6USERVER_NAMESPACE_BEGIN
7
8namespace storages::mysql::convert {
9
10template <typename T>
11struct To final {};
12
13namespace impl {
14
15template <typename T, typename DbType>
16concept HasConvert = requires(DbType&& from) { Convert(std::forward<DbType>(from), convert::To<T>{}); };
17
18} // namespace impl
19
20template <typename T, typename DbType>
21T DoConvert(DbType&& from) {
22 static_assert(
23 // TODO : better wording
24 impl::HasConvert<T, DbType>,
25 "There is no 'T Convert(From&&, storages::mysql::convert::To<T>)' in "
26 "neither namespace of 'T' or `storages::mysql::convert`"
27 );
28
29 return Convert(std::forward<DbType>(from), To<T>{});
30}
31
32} // namespace storages::mysql::convert
33
34USERVER_NAMESPACE_END