ECSTASY
All in the name
Loading...
Searching...
No Matches
is_serializer.hpp
Go to the documentation of this file.
1
11
12#ifndef ECSTASY_SERIALIZATION_CONCEPTS_ISSERIALIZER_HPP_
13#define ECSTASY_SERIALIZATION_CONCEPTS_ISSERIALIZER_HPP_
14
15#include <concepts>
16#include <string>
17#include <type_traits>
18
20
22{
34 template <typename S>
35 concept is_serializer = requires(S &serializer) {
37 requires std::derived_from<S, ISerializer>;
38
39 // clang-format off
40
42 // int
43 { serializer.save(std::declval<int>())} -> std::same_as<S &>;
44 { serializer.update(std::declval<int &>())} -> std::same_as<S &>;
45 // double
46 { serializer.save(std::declval<double>())} -> std::same_as<S &>;
47 { serializer.update(std::declval<double &>())} -> std::same_as<S &>;
48 // std::string
49 { serializer.save(std::declval<std::string>())} -> std::same_as<S &>;
50 { serializer.update(std::declval<std::string &>())} -> std::same_as<S &>;
51
52 // clang-format on
53 };
54
63 template <typename S>
65
66} // namespace ecstasy::serialization::concepts
67
68#endif /* !ECSTASY_SERIALIZATION_CONCEPTS_ISSERIALIZER_HPP_ */
Interface for all serializer classes.
Concept to check if a type is a serializer.
Namespace regrouping the serialization ecstasy concepts.
bool constexpr is_serializer_v
Alias for is_serializer<S>.