async_mqtt 9.0.1
Loading...
Searching...
No Matches
topic_sharename.hpp
1// Copyright Takatoshi Kondo 2022
2//
3// Distributed under the Boost Software License, Version 1.0.
4// (See accompanying file LICENSE_1_0.txt or copy at
5// http://www.boost.org/LICENSE_1_0.txt)
6
7#if !defined(ASYNC_MQTT_PACKET_TOPIC_SHARENAME_HPP)
8#define ASYNC_MQTT_PACKET_TOPIC_SHARENAME_HPP
9
10#include <async_mqtt/util/buffer.hpp>
11
12namespace async_mqtt {
13
28public:
29
34 template <
35 typename AllTopic,
36 typename std::enable_if_t<
37 std::is_convertible_v<std::decay_t<AllTopic>, std::string_view>,
38 std::nullptr_t
39 > = nullptr
40 >
42 AllTopic&& all_topic
43 ): all_topic_{std::forward<AllTopic>(all_topic)} {
44 auto const shared_prefix = std::string_view("$share/");
45 if (all_topic_.substr(0, shared_prefix.size()) == shared_prefix) {
46 // must have sharename
47 sharename_ = all_topic_.substr(shared_prefix.size());
48
49 auto const idx = sharename_.find_first_of('/');
50 if (idx == 0 || idx == std::string_view::npos) return;
51
52 topic_ = sharename_.substr(idx + 1);
53 sharename_ = sharename_.substr(0, sharename_.size() - topic_.size() - 1);
54 }
55 else {
56 topic_ = all_topic_;
57 }
58 }
59
64 std::string const& topic() const {
65 return topic_;
66 }
67
72 std::string const& sharename() const {
73 return sharename_;
74 }
75
82 std::string const& all_topic() const {
83 return all_topic_;
84 }
85
91 operator bool() const {
92 return !topic_.empty();
93 }
94
101 friend
102 bool operator<(topic_sharename const& lhs, topic_sharename const& rhs) {
103 return
104 std::tie(lhs.topic_, lhs.sharename_) <
105 std::tie(rhs.topic_, rhs.sharename_);
106 }
107
114 friend
115 bool operator==(topic_sharename const& lhs, topic_sharename const& rhs) {
116 return
117 std::tie(lhs.topic_, lhs.sharename_) ==
118 std::tie(rhs.topic_, rhs.sharename_);
119 }
120
121private:
122 std::string all_topic_;
123 std::string topic_;
124 std::string sharename_;
125};
126
127} // namespace async_mqtt
128
129#endif // ASYNC_MQTT_PACKET_TOPIC_SHARENAME_HPP
topic and sharename
Definition topic_sharename.hpp:27
std::string const & topic() const
Get topic.
Definition topic_sharename.hpp:64
std::string const & sharename() const
Get sharename.
Definition topic_sharename.hpp:72
friend bool operator==(topic_sharename const &lhs, topic_sharename const &rhs)
equal operator
Definition topic_sharename.hpp:115
topic_sharename(AllTopic &&all_topic)
constructor
Definition topic_sharename.hpp:41
friend bool operator<(topic_sharename const &lhs, topic_sharename const &rhs)
less than operator
Definition topic_sharename.hpp:102
std::string const & all_topic() const
Get all_topic.
Definition topic_sharename.hpp:82