cpp-msgpack-rpc
0.2.0
An RPC library implementing MessagePack RPC.
Toggle main menu visibility
Loading...
Searching...
No Matches
message_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 <tuple>
23
24
#include <msgpack.hpp>
25
26
#include "
msgpack_rpc/messages/impl/serialization_buffer.h
"
27
#include "
msgpack_rpc/messages/message_id.h
"
28
#include "
msgpack_rpc/messages/method_name_view.h
"
29
#include "
msgpack_rpc/messages/serialized_message.h
"
30
31
namespace
msgpack_rpc::messages
{
32
36
class
MessageSerializer
{
37
public
:
47
template
<
typename
... Parameters>
48
[[nodiscard]]
static
SerializedMessage
serialize_request
(
49
MethodNameView
method_name,
MessageID
message_id,
50
const
Parameters&... parameters) {
51
impl::SerializationBuffer
buffer;
52
msgpack::packer<impl::SerializationBuffer> packer{buffer};
53
packer.pack_array(4);
54
packer.pack(0);
55
packer.pack(message_id);
56
packer.pack(method_name.
name
());
57
packer.pack(std::forward_as_tuple(parameters...));
58
return
buffer.
release
();
59
}
60
69
template
<
typename
T>
70
[[nodiscard]]
static
SerializedMessage
serialize_successful_response
(
71
MessageID
request_id,
const
T& result) {
72
impl::SerializationBuffer
buffer;
73
msgpack::packer<impl::SerializationBuffer> packer{buffer};
74
packer.pack_array(4);
75
packer.pack(1);
76
packer.pack(request_id);
77
packer.pack_nil();
78
packer.pack(result);
79
return
buffer.
release
();
80
}
81
90
template
<
typename
T>
91
[[nodiscard]]
static
SerializedMessage
serialize_error_response
(
92
MessageID
request_id,
const
T& error) {
93
impl::SerializationBuffer
buffer;
94
msgpack::packer<impl::SerializationBuffer> packer{buffer};
95
packer.pack_array(4);
96
packer.pack(1);
97
packer.pack(request_id);
98
packer.pack(error);
99
packer.pack_nil();
100
return
buffer.
release
();
101
}
102
111
template
<
typename
... Parameters>
112
[[nodiscard]]
static
SerializedMessage
serialize_notification
(
113
MethodNameView
method_name,
const
Parameters&... parameters) {
114
impl::SerializationBuffer
buffer;
115
msgpack::packer<impl::SerializationBuffer> packer{buffer};
116
packer.pack_array(3);
117
packer.pack(2);
118
packer.pack(method_name.
name
());
119
packer.pack(std::forward_as_tuple(parameters...));
120
return
buffer.
release
();
121
}
122
};
123
124
}
// namespace msgpack_rpc::messages
msgpack_rpc::messages::MessageSerializer
Class to serialize messages.
Definition
message_serializer.h:36
msgpack_rpc::messages::MessageSerializer::serialize_error_response
static SerializedMessage serialize_error_response(MessageID request_id, const T &error)
Serialize an error response.
Definition
message_serializer.h:91
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_successful_response
static SerializedMessage serialize_successful_response(MessageID request_id, const T &result)
Serialize a successful response.
Definition
message_serializer.h:70
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::MethodNameView::name
std::string_view name() const noexcept
Get the method name.
Definition
method_name_view.h:122
msgpack_rpc::messages::SerializedMessage
Class of serialized message data.
Definition
serialized_message.h:34
msgpack_rpc::messages::impl::SerializationBuffer
Class of buffers for serialization.
Definition
serialization_buffer.h:35
msgpack_rpc::messages::impl::SerializationBuffer::release
SerializedMessage release() noexcept
Release the buffer as msgpack_rpc::messages::SerializedMessage object.
Definition
serialization_buffer.cpp:45
message_id.h
Definition of MessageID type.
method_name_view.h
Definition of MethodNameView class.
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
serialization_buffer.h
Definition of SerializationBuffer class.
serialized_message.h
Definition of SerializedMessage class.
include
msgpack_rpc
messages
message_serializer.h
Generated on
for cpp-msgpack-rpc by
1.18.0