Switch to IPv4 zeroconf, add test framework with discovery test, fix serial enumeration
This commit is contained in:
@@ -367,6 +367,18 @@ public:
|
||||
|
||||
pack_result pack(const std::vector<uint8_t> &v) { return pack_bin(v); }
|
||||
|
||||
template <typename T>
|
||||
requires (!std::is_same_v<T, uint8_t>)
|
||||
pack_result pack(const std::vector<T> &v) {
|
||||
auto r = pack_array(v.size());
|
||||
if (!r) return r;
|
||||
for (auto& elem : v) {
|
||||
r = r->get().pack(elem);
|
||||
if (!r) return r;
|
||||
}
|
||||
return r;
|
||||
}
|
||||
|
||||
template <size_t N>
|
||||
pack_result pack(const std::array<uint8_t, N> &v) { return pack_bin(v); }
|
||||
|
||||
@@ -744,6 +756,21 @@ inline result<parser> unpack(const parser &p, std::vector<uint8_t> &out) {
|
||||
return p.next();
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
requires (!std::is_same_v<T, uint8_t>)
|
||||
result<parser> unpack(const parser &p, std::vector<T> &out) {
|
||||
auto cnt = p.count();
|
||||
if (!cnt) return std::unexpected(cnt.error());
|
||||
out.resize(*cnt);
|
||||
result<parser> cur = p.first_item();
|
||||
for (size_t i = 0; i < *cnt; i++) {
|
||||
if (!cur) return cur;
|
||||
cur = unpack(*cur, out[i]);
|
||||
}
|
||||
if (!cur) return cur;
|
||||
return p.next();
|
||||
}
|
||||
|
||||
template <typename... Ts, size_t... Is>
|
||||
result<parser> unpack_tuple_elements(const parser &p, std::tuple<Ts...> &t, std::index_sequence<Is...>) {
|
||||
result<parser> cur = p.first_item();
|
||||
|
||||
Reference in New Issue
Block a user