7#if !defined(ASYNC_MQTT_PACKET_PUBOPTS_HPP)
8#define ASYNC_MQTT_PACKET_PUBOPTS_HPP
10#include <boost/assert.hpp>
12#include <async_mqtt/packet/qos.hpp>
36constexpr bool is_dup(std::uint8_t v) {
37 return (v & 0b00001000) != 0;
53 return static_cast<qos>((v & 0b00000110) >> 1);
69 return (v & 0b00000001) != 0;
84constexpr void set_dup(std::uint8_t& fixed_header,
bool dup) {
85 if (
dup) fixed_header |= 0b00001000;
86 else fixed_header &=
static_cast<std::uint8_t
>(~0b00001000);
117enum class dup : std::uint8_t {
137 constexpr opts() =
default;
140 constexpr opts(
opts const&) =
default;
141 constexpr opts& operator=(
opts &&) =
default;
142 constexpr opts& operator=(
opts const&) =
default;
148 explicit constexpr opts(std::uint8_t value) : data_(value) { }
233 {
return static_cast<enum
retain>(data_ & 0b00000001); }
241 {
return static_cast<enum
dup>(data_ & 0b00001000); }
249 {
return static_cast<enum
qos>((data_ & 0b00000110) >> 1); }
256 explicit constexpr operator std::uint8_t()
const {
return data_; }
273 std::uint8_t data_ = 0;
377 default:
return "invalid_retain";
417 default:
return "invalid_dup";
constexpr char const * dup_to_str(dup v)
stringize dup
Definition pubopts.hpp:413
constexpr qos get_qos(std::uint8_t v)
Get qos from the fixed header.
Definition pubopts.hpp:52
constexpr char const * retain_to_str(retain v)
stringize retain
Definition pubopts.hpp:373
constexpr void set_dup(std::uint8_t &fixed_header, bool dup)
Set DUP to the fixed header.
Definition pubopts.hpp:84
constexpr bool is_retain(std::uint8_t v)
Check fixed header is RETAIN.
Definition pubopts.hpp:68
std::ostream & operator<<(std::ostream &o, dup v)
output to the stream
Definition pubopts.hpp:435
retain
MQTT RETAIN.
Definition pubopts.hpp:100
std::ostream & operator<<(std::ostream &o, retain v)
output to the stream
Definition pubopts.hpp:395
dup
MQTT DUP.
Definition pubopts.hpp:117
constexpr bool is_dup(std::uint8_t v)
Check fixed header is DUP.
Definition pubopts.hpp:36
qos
MQTT QoS.
Definition qos.hpp:35
@ exactly_once
Exactly once delivery.
@ at_most_once
At most once delivery.
@ at_least_once
At least once delivery.
MQTT PublishOptions.
Definition pubopts.hpp:136
constexpr operator std::uint8_t() const
Get byte image.
Definition pubopts.hpp:256
constexpr opts operator|(dup lhs, retain rhs)
Combine opts operator.
Definition pubopts.hpp:316
constexpr opts(std::uint8_t value)
constructor
Definition pubopts.hpp:148
constexpr opts(dup value)
constructor
Definition pubopts.hpp:160
constexpr opts & operator|=(retain rhs)
Combine opts operator.
Definition pubopts.hpp:211
constexpr bool operator==(opts rhs) const
equal operator
Definition pubopts.hpp:263
constexpr opts operator|(qos lhs, retain rhs)
Combine opts operator.
Definition pubopts.hpp:344
constexpr dup get_dup() const
Get dup.
Definition pubopts.hpp:240
constexpr bool operator<(opts rhs) const
less than operator
Definition pubopts.hpp:270
constexpr opts operator|(dup lhs, qos rhs)
Combine opts operator.
Definition pubopts.hpp:330
constexpr retain get_retain() const
Get retain.
Definition pubopts.hpp:232
constexpr qos get_qos() const
Get qos.
Definition pubopts.hpp:248
constexpr opts & operator|=(qos rhs)
Combine opts operator.
Definition pubopts.hpp:225
constexpr opts operator|(opts rhs) const
Combine opts operator.
Definition pubopts.hpp:176
constexpr opts & operator|=(dup rhs)
Combine opts operator.
Definition pubopts.hpp:218
constexpr opts(retain value)
constructor
Definition pubopts.hpp:154
constexpr opts operator|(qos rhs) const
Combine opts operator.
Definition pubopts.hpp:197
constexpr opts operator|(retain lhs, dup rhs)
Combine opts operator.
Definition pubopts.hpp:288
constexpr opts operator|(qos lhs, dup rhs)
Combine opts operator.
Definition pubopts.hpp:358
constexpr opts operator|(retain lhs, qos rhs)
Combine opts operator.
Definition pubopts.hpp:302
constexpr opts(qos value)
constructor
Definition pubopts.hpp:166
constexpr opts operator|(dup rhs) const
Combine opts operator.
Definition pubopts.hpp:190
constexpr opts operator|(retain rhs) const
Combine opts operator.
Definition pubopts.hpp:183
constexpr opts & operator|=(opts rhs)
Combine opts operator.
Definition pubopts.hpp:204