commondefs.h
3.2 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
#ifndef OSDEV_COMPONENTS_MQTT_COMMONDEFS_H
#define OSDEV_COMPONENTS_MQTT_COMMONDEFS_H
// std
#include <chrono>
#include <cstdint>
#include <map>
#include <ostream>
#include <set>
#include <string>
#include <vector>
// boost
#include <boost/lexical_cast.hpp>
#include <boost/optional.hpp>
#include <boost/uuid/uuid.hpp>
#include <boost/uuid/uuid_io.hpp>
#include "utils.h"
/// @brief Check if an id is valid
/// @throws InvalidArgumentException if id is invalid
#define OSDEV_COMPONENTS_CHECKMQTTID(id) \
[&] { \
if (id.is_nil()) { \
} \
}()
namespace osdev {
namespace components {
namespace mqtt {
using MqttId = boost::uuids::uuid;
using OptionalId = MqttId;
using MqttIdSet = std::set<MqttId>;
using MqttIdSetIterator = MqttIdSet::const_iterator;
using MqttIdSetDelta = std::pair<MqttIdSet, MqttIdSet>;
using StdTime = std::chrono::system_clock::time_point;
using OptionalTime = boost::optional<StdTime>;
using StdTimeVec = std::vector<StdTime>;
using SequenceNumber = std::uint32_t;
using OptionalSequenceNumber = boost::optional<SequenceNumber>;
using CustomField = std::string;
using CustomFieldCollection = std::vector<CustomField>;
using CountryCodeEnum = std::int32_t;
/**
* @brief Defines a parsed uri.
*/
using ParsedUri = std::map<std::string, std::string>;
/**
* @brief Type for the parsed query part of a uri.
*/
using ParsedQuery = std::map<std::string, std::string>;
/**
* @brief Type for the parsed path part of a uri.
*/
using ParsedPath = std::vector<std::string>;
/**
* @brief Defines a duration with the granularity of a day in seconds (24 * 60 * 60 = 86400).
* This duration can be used to create a time_point at midnight of a given DateTime amongst others.
*
* The representation is a signed type so that negative durations are also possible.
*/
using days = std::chrono::duration<std::int32_t, std::ratio<86400>>;
/**
* @brief Defines a duration with the granularity of a year in seconds. A year is a bit longer than 365 days (365.2425). If a year is
* subtracted from a date the time part of the new date will therefore differ from the time part of the subtracted from date.
*
* The representation is a signed type so that negative durations are also possible.
*/
using years = std::chrono::duration<std::int32_t, std::ratio<31556952>>; // excactly 365 days would give 31536000
/**
* A timepoint type that is printed with millisecond resolution.
*/
struct StdTimeMs
{
StdTimeMs(const StdTime& tp)
: timePoint(tp)
{
}
operator StdTime() const { return timePoint; }
StdTime timePoint;
};
std::ostream& operator<<(std::ostream& os, const StdTimeMs& rhs);
} // End namespace mqtt
} // End namespace components
} // End namespace osdev
namespace std {
std::ostream& operator<<(std::ostream& os, const osdev::components::mqtt::StdTime& rhs);
} // End namespace std
#endif // OSDEV_COMPONENTS_MQTT_COMMONDEFS_H