property_util.hpp 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  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. #if !defined(MQTT_BROKER_PROPERTY_UTIL_HPP)
  7. #define MQTT_BROKER_PROPERTY_UTIL_HPP
  8. #include <mqtt/config.hpp>
  9. #include <mqtt/broker/broker_namespace.hpp>
  10. #include <mqtt/optional.hpp>
  11. #include <mqtt/property_variant.hpp>
  12. #include <mqtt/visitor_util.hpp>
  13. MQTT_BROKER_NS_BEGIN
  14. template <typename T>
  15. inline optional<T> get_property(v5::properties const& props) {
  16. optional<T> result;
  17. auto visitor = make_lambda_visitor(
  18. [&result](T const& t) { result = t; },
  19. [](auto const&) { }
  20. );
  21. for (auto const& p : props) {
  22. MQTT_NS::visit(visitor, p);
  23. }
  24. return result;
  25. }
  26. template <typename T>
  27. inline void set_property(v5::properties& props, T&& v) {
  28. auto visitor = make_lambda_visitor(
  29. [&v](T& t) mutable { t = std::forward<T>(v); },
  30. [](auto&) { }
  31. );
  32. for (auto& p : props) {
  33. MQTT_NS::visit(visitor, p);
  34. }
  35. }
  36. MQTT_BROKER_NS_END
  37. #endif // MQTT_BROKER_PROPERTY_UTIL_HPP