~aleteoryx/muditaos

ref: 2ae306bd40be7dbf5ecc3de00e84d4d0e84f59d0 muditaos/module-services/service-bluetooth/service-bluetooth/SettingsSerializer.cpp -rw-r--r-- 1.6 KiB
2ae306bd — Paweł Joński [BH-662] Handle alarm turn off and snooze 4 years ago
                                                                                
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
// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#include "SettingsSerializer.hpp"
#include "btstack_util.h"
#include <log.hpp>

namespace strings
{
    constexpr inline auto addr    = "addr";
    constexpr inline auto name    = "name";
    constexpr inline auto devices = "devices";
} // namespace strings

auto SettingsSerializer::toString(const std::vector<Devicei> &devices) -> std::string
{
    json11::Json::array devicesJson;
    for (auto &device : devices) {
        auto deviceEntry =
            json11::Json::object{{strings::addr, bd_addr_to_str(device.address)}, {strings::name, device.name}};
        devicesJson.emplace_back(deviceEntry);
    }
    json11::Json finalJson = json11::Json::object{{strings::devices, devicesJson}};

    return finalJson.dump();
}
auto SettingsSerializer::fromString(const std::string &jsonStr) -> std::vector<Devicei>
{
    json11::Json devicesJson;
    std::string err;
    devicesJson = json11::Json::parse(jsonStr.c_str(), err);
    if (!err.empty()) {
        LOG_ERROR("Failed parsing device string!");
        return std::vector<Devicei>();
    }
    json11::Json::array devicesArray;
    devicesArray = std::move(devicesJson[strings::devices].array_items());

    std::vector<Devicei> devicesVector;
    for (auto &device : devicesArray) {
        Devicei temp;
        sscanf_bd_addr(device[strings::addr].string_value().c_str(), temp.address);
        temp.name = device[strings::name].string_value();
        devicesVector.emplace_back(temp);
    }
    return devicesVector;
}