cpp-msgpack-rpc
0.2.0
An RPC library implementing MessagePack RPC.
Toggle main menu visibility
Loading...
Searching...
No Matches
parameters_serializer.h
Go to the documentation of this file.
1
/*
2
* Copyright 2023 MusicScience37 (Kenta Kabashima)
3
*
4
* Licensed under the Apache License, Version 2.0 (the "License");
5
* you may not use this file except in compliance with the License.
6
* You may obtain a copy of the License at
7
*
8
* http://www.apache.org/licenses/LICENSE-2.0
9
*
10
* Unless required by applicable law or agreed to in writing, software
11
* distributed under the License is distributed on an "AS IS" BASIS,
12
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
* See the License for the specific language governing permissions and
14
* limitations under the License.
15
*/
20
#pragma once
21
22
#include <cstddef>
23
#include <tuple>
24
#include <utility>
25
26
#include "
msgpack_rpc/messages/message_id.h
"
27
#include "
msgpack_rpc/messages/message_serializer.h
"
28
#include "
msgpack_rpc/messages/method_name_view.h
"
29
#include "
msgpack_rpc/messages/serialized_message.h
"
30
31
namespace
msgpack_rpc::clients::impl
{
32
36
class
IParametersSerializer {
37
public
:
45
[[nodiscard]]
virtual
messages::SerializedMessage
create_serialized_request
(
46
messages::MethodNameView
method_name,
47
messages::MessageID
request_id)
const
= 0;
48
55
[[nodiscard]]
virtual
messages::SerializedMessage
56
create_serialized_notification
(
57
messages::MethodNameView
method_name)
const
= 0;
58
59
IParametersSerializer
(
const
IParametersSerializer&) =
delete
;
60
IParametersSerializer& operator=(
const
IParametersSerializer&) =
delete
;
61
65
IParametersSerializer
(IParametersSerializer&&) noexcept = default;
66
72
IParametersSerializer& operator=(
73
IParametersSerializer&&) noexcept = default;
74
75
protected:
77
IParametersSerializer() noexcept = default;
78
80
~IParametersSerializer() noexcept = default;
81
};
82
88
template <typename... Parameters>
89
class
ParametersSerializer
final : public IParametersSerializer {
90
public
:
96
explicit
ParametersSerializer
(
const
Parameters&... parameters)
97
:
parameters_
(parameters...) {}
98
100
[[nodiscard]]
messages::SerializedMessage
create_serialized_request
(
101
messages::MethodNameView
method_name,
102
messages::MessageID
request_id)
const override
{
103
return
create_serialized_request_impl
(
104
method_name, request_id, std::index_sequence_for<Parameters...>());
105
}
106
108
[[nodiscard]]
messages::SerializedMessage
create_serialized_notification
(
109
messages::MethodNameView
method_name)
const override
{
110
return
create_serialized_notification_impl
(
111
method_name, std::index_sequence_for<Parameters...>());
112
}
113
114
ParametersSerializer
(
const
ParametersSerializer
&) =
delete
;
115
ParametersSerializer
& operator=(
const
ParametersSerializer
&) =
delete
;
116
120
ParametersSerializer
(
ParametersSerializer
&&) noexcept = default;
121
127
ParametersSerializer
& operator=(
ParametersSerializer
&&) noexcept = default;
128
130
~
ParametersSerializer
() = default;
131
132
private:
141
template <
std
::
size_t
... Indices>
142
[[nodiscard]]
messages
::SerializedMessage
create_serialized_request_impl
(
143
messages
::MethodNameView method_name,
messages
::MessageID request_id,
144
std
::index_sequence<Indices...>
/*indices*/
)
const
{
145
return
messages::MessageSerializer::serialize_request
(
146
method_name, request_id, std::get<Indices>(
parameters_
)...);
147
}
148
156
template
<std::size_t... Indices>
157
[[nodiscard]]
messages::SerializedMessage
158
create_serialized_notification_impl
(
messages::MethodNameView
method_name,
159
std::index_sequence<Indices...>
/*indices*/
)
const
{
160
return
messages::MessageSerializer::serialize_notification
(
161
method_name, std::get<Indices>(
parameters_
)...);
162
}
163
165
std::tuple<
const
Parameters&...>
parameters_
;
166
};
167
175
template
<
typename
... Parameters>
176
[[nodiscard]]
ParametersSerializer
<Parameters...>
make_parameters_serializer
(
177
const
Parameters&... parameters) {
178
return
ParametersSerializer
<Parameters...>(parameters...);
179
}
180
181
}
// namespace msgpack_rpc::clients::impl
msgpack_rpc::clients::impl::IParametersSerializer::create_serialized_notification
virtual messages::SerializedMessage create_serialized_notification(messages::MethodNameView method_name) const =0
Create a serialized notification data.
msgpack_rpc::clients::impl::IParametersSerializer::create_serialized_request
virtual messages::SerializedMessage create_serialized_request(messages::MethodNameView method_name, messages::MessageID request_id) const =0
Create a serialized request data.
msgpack_rpc::clients::impl::IParametersSerializer::IParametersSerializer
IParametersSerializer(IParametersSerializer &&) noexcept=default
Move constructor.
msgpack_rpc::clients::impl::IParametersSerializer::IParametersSerializer
IParametersSerializer() noexcept=default
Constructor.
msgpack_rpc::clients::impl::ParametersSerializer
Class of serializer of parameters.
Definition
parameters_serializer.h:89
msgpack_rpc::clients::impl::ParametersSerializer::create_serialized_request_impl
messages::SerializedMessage create_serialized_request_impl(messages::MethodNameView method_name, messages::MessageID request_id, std::index_sequence< Indices... >) const
Create a serialized request data.
Definition
parameters_serializer.h:142
msgpack_rpc::clients::impl::ParametersSerializer::ParametersSerializer
ParametersSerializer(ParametersSerializer &&) noexcept=default
Move constructor.
msgpack_rpc::clients::impl::ParametersSerializer::create_serialized_notification
messages::SerializedMessage create_serialized_notification(messages::MethodNameView method_name) const override
Create a serialized notification data.
Definition
parameters_serializer.h:108
msgpack_rpc::clients::impl::ParametersSerializer::parameters_
std::tuple< const Parameters &... > parameters_
Parameters.
Definition
parameters_serializer.h:165
msgpack_rpc::clients::impl::ParametersSerializer::create_serialized_notification_impl
messages::SerializedMessage create_serialized_notification_impl(messages::MethodNameView method_name, std::index_sequence< Indices... >) const
Create a serialized notification data.
Definition
parameters_serializer.h:158
msgpack_rpc::clients::impl::ParametersSerializer::ParametersSerializer
ParametersSerializer(const Parameters &... parameters)
Constructor.
Definition
parameters_serializer.h:96
msgpack_rpc::clients::impl::ParametersSerializer::create_serialized_request
messages::SerializedMessage create_serialized_request(messages::MethodNameView method_name, messages::MessageID request_id) const override
Create a serialized request data.
Definition
parameters_serializer.h:100
msgpack_rpc::messages::MessageSerializer::serialize_notification
static SerializedMessage serialize_notification(MethodNameView method_name, const Parameters &... parameters)
Serialize a notification.
Definition
message_serializer.h:112
msgpack_rpc::messages::MessageSerializer::serialize_request
static SerializedMessage serialize_request(MethodNameView method_name, MessageID message_id, const Parameters &... parameters)
Serialize a request.
Definition
message_serializer.h:48
msgpack_rpc::messages::MethodNameView
Class of method names.
Definition
method_name_view.h:39
msgpack_rpc::messages::SerializedMessage
Class of serialized message data.
Definition
serialized_message.h:34
message_id.h
Definition of MessageID type.
message_serializer.h
Definition of MessageSerializer class.
method_name_view.h
Definition of MethodNameView class.
msgpack_rpc::clients::impl
Namespace of internal implementations.
Definition
i_call_future_impl.h:26
msgpack_rpc::clients::impl::make_parameters_serializer
ParametersSerializer< Parameters... > make_parameters_serializer(const Parameters &... parameters)
Create ParametersSerializer object.
Definition
parameters_serializer.h:176
msgpack_rpc::messages
Namespace of messages.
Definition
buffer_view.h:24
msgpack_rpc::messages::MessageID
std::uint32_t MessageID
Type of message IDs.
Definition
message_id.h:27
std
STL namespace.
serialized_message.h
Definition of SerializedMessage class.
include
msgpack_rpc
clients
impl
parameters_serializer.h
Generated on
for cpp-msgpack-rpc by
1.18.0