GMP 0.4.0
Generative Metaprogramming library for C++
Loading...
Searching...
No Matches
archive.hpp
Go to the documentation of this file.
1// ___ __ __ ___
2// / __| \/ | _ \ GMP(Generative Metaprogramming)
3// | (_ | |\/| | _/ version 0.4.0
4// \___|_| |_|_| https://github.com/lkimuk/gmp
5//
6// SPDX-FileCopyrightText: 2023-2026 Miles Li <https://www.cppmore.com/>
7// SPDX-License-Identifier: MIT
8//
9// This file is part of the GMP (Generative Metaprogramming) library.
10// Full project source: https://github.com/lkimuk/gmp
11
12#ifndef GMP_SERIALIZATION_ARCHIVE_HPP_
13#define GMP_SERIALIZATION_ARCHIVE_HPP_
14
15#include <concepts>
16#include <cstddef>
17#include <cstdint>
18#include <string_view>
19#include <type_traits>
20#include <utility>
21
23
24namespace gmp {
25
27 null,
28 boolean,
32 string,
33 array,
34 object
35};
36
37template <typename A>
38concept serialization_writer = requires(A &a, bool b, std::int64_t i, std::uint64_t u, double d,
39 std::string_view s, std::size_t n) {
40 { a.write_null() } -> std::same_as<serialization_result<void>>;
41 { a.write_bool(b) } -> std::same_as<serialization_result<void>>;
42 { a.write_signed(i) } -> std::same_as<serialization_result<void>>;
43 {
44 a.write_unsigned(u)
45 } -> std::same_as<serialization_result<void>>;
46 {
47 a.write_floating(d)
48 } -> std::same_as<serialization_result<void>>;
49 { a.write_string(s) } -> std::same_as<serialization_result<void>>;
50 { a.begin_array(n) } -> std::same_as<serialization_result<void>>;
51 { a.end_array() } -> std::same_as<serialization_result<void>>;
52 { a.begin_object(n) } -> std::same_as<serialization_result<void>>;
53 { a.write_key(s) } -> std::same_as<serialization_result<void>>;
54 { a.end_object() } -> std::same_as<serialization_result<void>>;
55 };
56
57template <typename A>
59 std::move_constructible<A> &&
60 requires(const A &a, std::size_t i) {
61 { a.kind() } -> std::same_as<serialization_kind>;
62 { a.size() } -> std::same_as<std::size_t>;
63 { a.read_bool() } -> std::same_as<bool>;
64 { a.read_signed() } -> std::same_as<std::int64_t>;
65 { a.read_unsigned() } -> std::same_as<std::uint64_t>;
66 { a.read_floating() } -> std::same_as<double>;
67 { a.read_string() } -> std::same_as<std::string_view>;
68 { a.element(i) } -> std::same_as<A>;
69 requires std::same_as<std::remove_cvref_t<decltype(a.member(i).value)>, A>;
70 { a.member(i).name } -> std::convertible_to<std::string_view>;
71 };
72
73} // namespace gmp
74
75#endif // GMP_SERIALIZATION_ARCHIVE_HPP_
consteval auto enum_values()
Get all enumerator values of an enumeration type at compile-time.
Definition meta.hpp:193
Definition lock.hpp:21
serialization_kind
Definition archive.hpp:26