COMMS
Template library intended to help with implementation of communication protocols.
Loading...
Searching...
No Matches
MessageImplBuilder.h
1//
2// Copyright 2015 - 2026 (C). Alex Robenko. All rights reserved.
3//
4// SPDX-License-Identifier: MPL-2.0
5//
6// This Source Code Form is subject to the terms of the Mozilla Public
7// License, v. 2.0. If a copy of the MPL was not distributed with this
8// file, You can obtain one at http://mozilla.org/MPL/2.0/.
9
10#pragma once
11
13#include "comms/Assert.h"
14#include "comms/details/MessageImplOptionsParser.h"
15#include "comms/ErrorStatus.h"
16#include "comms/util/access.h"
17#include "comms/util/Tuple.h"
19
20namespace comms
21{
22
23namespace details
24{
25
26template <typename TMessage, typename... TOptions>
27class MessageImplBuilder
28{
29 using ParsedOptions = MessageImplOptionsParser<TOptions...>;
30
31 static_assert(ParsedOptions::HasFieldsImpl, "Option comms::option::def::FieldsImpl must be used");
32
33 using FieldsBase =
34 typename ParsedOptions::template BuildFieldsImpl<TMessage>;
35
36 using FailOnInvalidBase =
37 typename ParsedOptions::template BuildFailOnInvalidImpl<FieldsBase>;
38
39 using VersionBase =
40 typename ParsedOptions::template BuildVersionImpl<FailOnInvalidBase>;
41
42 using FieldsReadImplBase =
43 typename ParsedOptions::template BuildReadImpl<VersionBase>;
44
45 using FieldsWriteImplBase =
46 typename ParsedOptions::template BuildWriteImpl<FieldsReadImplBase>;
47
48 using FieldsValidBase =
49 typename ParsedOptions::template BuildValidImpl<FieldsWriteImplBase>;
50
51 using FieldsLengthBase =
52 typename ParsedOptions::template BuildLengthImpl<FieldsValidBase>;
53
54 using RefreshBase =
55 typename ParsedOptions::template BuildRefreshImpl<FieldsLengthBase>;
56
57 using DispatchBase =
58 typename ParsedOptions::template BuildDispatchImpl<RefreshBase>;
59
60 using StaticNumIdBase =
61 typename ParsedOptions::template BuildStaticMsgId<DispatchBase>;
62
63 using PolymorphicStaticNumIdBase =
64 typename ParsedOptions::template BuildMsgIdImpl<StaticNumIdBase>;
65
66 using NameBase =
67 typename ParsedOptions::template BuildNameImpl<PolymorphicStaticNumIdBase>;
68
69public:
70 using Options = ParsedOptions;
71 using Type = NameBase;
72};
73
74template <typename TMessage, typename... TOptions>
75using MessageImplBuilderT =
76 typename MessageImplBuilder<TMessage, TOptions...>::Type;
77
78} // namespace details
79
80} // namespace comms
81
This file contains classes required for generic custom assertion functionality.
Contains various compiler related definitions.
This file contain definition of error statuses used by comms module.
Contains various tuple type manipulation classes and functions.
Contains functions for raw data access / (de)serialization.
Main namespace for all classes / functions of COMMS library.
Replacement to some types from standard type_traits.