mqtt_cpp
property_util.hpp
Go to the documentation of this file.
1 // Copyright Takatoshi Kondo 2020
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(MQTT_BROKER_PROPERTY_UTIL_HPP)
8 #define MQTT_BROKER_PROPERTY_UTIL_HPP
9 
10 #include <mqtt/config.hpp>
11 
13 #include <mqtt/optional.hpp>
15 #include <mqtt/visitor_util.hpp>
16 
18 
19 template <typename T>
20 inline optional<T> get_property(v5::properties const& props) {
21  optional<T> result;
22 
23  auto visitor = make_lambda_visitor(
24  [&result](T const& t) { result = t; },
25  [](auto const&) { }
26  );
27 
28  for (auto const& p : props) {
29  MQTT_NS::visit(visitor, p);
30  }
31 
32  return result;
33 }
34 
35 template <typename T>
36 inline void set_property(v5::properties& props, T&& v) {
37  auto visitor = make_lambda_visitor(
38  [&v](T& t) mutable { t = std::forward<T>(v); },
39  [](auto&) { }
40  );
41 
42  for (auto& p : props) {
43  MQTT_NS::visit(visitor, p);
44  }
45 }
46 
48 
49 #endif // MQTT_BROKER_PROPERTY_UTIL_HPP
#define MQTT_BROKER_NS_END
Definition: broker_namespace.hpp:22
#define MQTT_BROKER_NS_BEGIN
Definition: broker_namespace.hpp:21
std::vector< property_variant > properties
Definition: property_variant.hpp:51
constexpr decltype(auto) visit(Visitor &&vis, Variants &&... vars)
Definition: variant.hpp:60
lambda_visitor< Lambdas... > make_lambda_visitor(Lambdas &&... lambdas)
Definition: visitor_util.hpp:37
MQTT_BROKER_NS_BEGIN optional< T > get_property(v5::properties const &props)
Definition: property_util.hpp:20
void set_property(v5::properties &props, T &&v)
Definition: property_util.hpp:36