Monero
Loading...
Searching...
No Matches
messages_map.hpp
Go to the documentation of this file.
1// Copyright (c) 2017-2022, The Monero Project
2//
3// All rights reserved.
4//
5// Redistribution and use in source and binary forms, with or without modification, are
6// permitted provided that the following conditions are met:
7//
8// 1. Redistributions of source code must retain the above copyright notice, this list of
9// conditions and the following disclaimer.
10//
11// 2. Redistributions in binary form must reproduce the above copyright notice, this list
12// of conditions and the following disclaimer in the documentation and/or other
13// materials provided with the distribution.
14//
15// 3. Neither the name of the copyright holder nor the names of its contributors may be
16// used to endorse or promote products derived from this software without specific
17// prior written permission.
18//
19// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
20// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
21// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
22// THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
24// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
25// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
26// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
27// THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28//
29
30#ifndef MONERO_MESSAGES_MAP_H
31#define MONERO_MESSAGES_MAP_H
32
33#include <string>
34#include <type_traits>
35#include <memory>
36#include "exceptions.hpp"
37
38#include "trezor_defs.hpp"
39
40#include <google/protobuf/stubs/common.h>
41#include <google/protobuf/generated_message_util.h>
42#include <google/protobuf/repeated_field.h>
43#include <google/protobuf/extension_set.h>
44#include <google/protobuf/generated_enum_reflection.h>
45#include "google/protobuf/descriptor.pb.h"
46
47#ifdef PROTOBUF_HAS_ABSEIL
48#include <absl/strings/string_view.h>
49#endif
50
51#include "messages/messages.pb.h"
52
53namespace hw {
54namespace trezor {
55
57 public:
59
60 }
61
62 static ::google::protobuf::Message * get_message(int wire_number);
63 static ::google::protobuf::Message * get_message(messages::MessageType);
64 static ::google::protobuf::Message * get_message(const std::string & msg_name);
65 static messages::MessageType get_message_wire_number(const google::protobuf::Message * msg);
66 static messages::MessageType get_message_wire_number(const google::protobuf::Message & msg);
67 static messages::MessageType get_message_wire_number(const std::string & msg_name);
68
69#ifdef PROTOBUF_HAS_ABSEIL
70 static messages::MessageType get_message_wire_number(const absl::string_view & msg_name); // Protobuf 30 and up
71#endif
72
73 template<class t_message=google::protobuf::Message>
74 static messages::MessageType get_message_wire_number() {
75 BOOST_STATIC_ASSERT(boost::is_base_of<google::protobuf::Message, t_message>::value);
76 return get_message_wire_number(t_message::default_instance().GetDescriptor()->name());
77 }
78 };
79
80 template<class t_message=google::protobuf::Message>
81 std::shared_ptr<t_message> message_ptr_retype(std::shared_ptr<google::protobuf::Message> & in){
82 BOOST_STATIC_ASSERT(boost::is_base_of<google::protobuf::Message, t_message>::value);
83 if (!in){
84 return nullptr;
85 }
86
87 return std::dynamic_pointer_cast<t_message>(in);
88 }
89
90 template<class t_message=google::protobuf::Message>
91 std::shared_ptr<t_message> message_ptr_retype_static(std::shared_ptr<google::protobuf::Message> & in){
92 BOOST_STATIC_ASSERT(boost::is_base_of<google::protobuf::Message, t_message>::value);
93 if (!in){
94 return nullptr;
95 }
96
97 return std::static_pointer_cast<t_message>(in);
98 }
99
100}}
101
102#endif //MONERO_MESSAGES_MAP_H
static messages::MessageType get_message_wire_number()
Definition messages_map.hpp:74
MessageMapper()
Definition messages_map.hpp:58
::google::protobuf::Message * get_message(int wire_number)
Definition messages_map.cpp:58
Definition device_trezor.cpp:35
std::shared_ptr< t_message > message_ptr_retype(std::shared_ptr< google::protobuf::Message > &in)
Definition messages_map.hpp:81
std::shared_ptr< t_message > message_ptr_retype_static(std::shared_ptr< google::protobuf::Message > &in)
Definition messages_map.hpp:91
Definition device.cpp:38
const char * name
Definition options.c:30