Crunch
A Message Definition Language for Getting Things Right
Loading...
Searching...
No Matches
crunch_serdes.hpp
1#pragma once
2
3#include <concepts>
4#include <crunch/messages/crunch_messages.hpp>
5#include <cstddef>
6#include <optional>
7#include <span>
8#include <type_traits>
9
10namespace Crunch {
11
35template <typename Policy, typename Message>
36concept SerdesPolicy =
38 requires(const Message& msg, std::span<std::byte> output,
39 std::span<const std::byte> input) {
40 {
41 std::bool_constant<(Policy::template Size<Message>(), true)>()
42 } -> std::same_as<std::true_type>;
43 { Policy::template Size<Message>() } -> std::same_as<std::size_t>;
44
45 { Policy::Serialize(msg, output) } -> std::same_as<std::size_t>;
46 {
47 Policy::Deserialize(input, const_cast<Message&>(msg))
48 } -> std::same_as<std::optional<Error>>;
49 {
50 std::bool_constant<(Policy::GetFormat(), true)>()
51 } -> std::same_as<std::true_type>;
52 { Policy::GetFormat() } -> std::same_as<Format>;
53 };
54
55} // namespace Crunch
Concept defining a Serialization/Deserialization policy.
Definition: crunch_serdes.hpp:36
Concept ensuring a type is a fully valid CrunchMessage.
Definition: crunch_messages.hpp:119
The public API for Crunch.
Definition: crunch_endian.hpp:10