cpp-msgpack-rpc
0.2.0
An RPC library implementing MessagePack RPC.
Toggle main menu visibility
Loading...
Searching...
No Matches
message_parser.cpp
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
#include "
msgpack_rpc/messages/message_parser.h
"
21
22
#include <utility>
23
24
#include "
msgpack_rpc/common/msgpack_rpc_exception.h
"
25
#include "
msgpack_rpc/common/status_code.h
"
26
#include "
msgpack_rpc/messages/impl/parse_message_from_object.h
"
27
#include "
msgpack_rpc/messages/parsed_message.h
"
28
29
namespace
msgpack_rpc::messages
{
30
31
MessageParser::MessageParser
(
const
config::MessageParserConfig
&
config
)
32
:
read_buffer_size_
(
config
.read_buffer_size()) {}
33
34
MessageParser::~MessageParser
() =
default
;
35
36
BufferView
MessageParser::prepare_buffer
() {
37
parser_
.reserve_buffer(
read_buffer_size_
);
38
return
BufferView
(
parser_
.buffer(),
read_buffer_size_
);
39
}
40
41
void
MessageParser::consumed
(std::size_t num_bytes) {
42
parser_
.buffer_consumed(num_bytes);
43
}
44
45
std::optional<ParsedMessage>
MessageParser::try_parse
() {
46
msgpack::object_handle object;
47
try
{
48
if
(!
parser_
.next(
object
)) {
49
return
std::nullopt;
50
}
51
}
catch
(
const
msgpack::unpack_error&) {
52
throw
MsgpackRPCException
(
53
StatusCode::INVALID_MESSAGE,
"Failed to parse a message."
);
54
}
55
56
return
impl::parse_message_from_object
(std::move(
object
));
57
}
58
59
}
// namespace msgpack_rpc::messages
msgpack_rpc::MsgpackRPCException
Class of exceptions in cpp-msgpack-rpc library.
Definition
msgpack_rpc_exception.h:35
msgpack_rpc::config::MessageParserConfig
Class of configuration of parsers of messages.
Definition
message_parser_config.h:31
msgpack_rpc::messages::BufferView
Class of buffers without memory management.
Definition
buffer_view.h:29
msgpack_rpc::messages::BufferView::BufferView
BufferView(char *data, std::size_t size)
Constructor.
Definition
buffer_view.h:40
msgpack_rpc::messages::MessageParser::~MessageParser
~MessageParser()
Destructor.
msgpack_rpc::messages::MessageParser::read_buffer_size_
std::size_t read_buffer_size_
Buffer size to read at once.
Definition
message_parser.h:83
msgpack_rpc::messages::MessageParser::try_parse
std::optional< ParsedMessage > try_parse()
Try to parse a message and return it if parsed, throw an exception if the message data is invalid.
Definition
message_parser.cpp:45
msgpack_rpc::messages::MessageParser::consumed
void consumed(std::size_t num_bytes)
Set some bytes to be consumed.
Definition
message_parser.cpp:41
msgpack_rpc::messages::MessageParser::MessageParser
MessageParser(const config::MessageParserConfig &config)
Constructor.
Definition
message_parser.cpp:31
msgpack_rpc::messages::MessageParser::prepare_buffer
BufferView prepare_buffer()
Prepare a buffer.
Definition
message_parser.cpp:36
msgpack_rpc::messages::MessageParser::parser_
msgpack::unpacker parser_
Parser.
Definition
message_parser.h:80
message_parser.h
Definition of MessageParser class.
msgpack_rpc_exception.h
Definition of MsgpackRPCException class.
msgpack_rpc::config
Namespace of configurations.
Definition
client_config.h:32
msgpack_rpc::messages::impl::parse_message_from_object
ParsedMessage parse_message_from_object(msgpack::object_handle object)
Parse a message from an object in msgpack library.
Definition
parse_message_from_object.h:178
msgpack_rpc::messages
Namespace of messages.
Definition
buffer_view.h:24
parse_message_from_object.h
Definition of parse_message_from_object function.
parsed_message.h
Definition of ParsedMessage type.
status_code.h
Definition of StatusCode enumeration.
src
msgpack_rpc
messages
message_parser.cpp
Generated on
for cpp-msgpack-rpc by
1.18.0