2023-09-06 09:30:41 +08:00
|
|
|
// SPDX-FileCopyrightText: 2023 UnionTech Software Technology Co., Ltd.
|
|
|
|
//
|
|
|
|
// SPDX-License-Identifier: LGPL-3.0-or-later
|
|
|
|
|
|
|
|
#include "variantValue.h"
|
|
|
|
#include <sstream>
|
|
|
|
|
|
|
|
std::unique_ptr<VariantValue> creatValueHandler(msg_ptr &msg, DBusValueType type)
|
|
|
|
{
|
|
|
|
switch (type) {
|
2023-10-07 18:11:22 +08:00
|
|
|
case DBusValueType::String:
|
2023-09-06 09:30:41 +08:00
|
|
|
return std::make_unique<StringValue>(msg);
|
|
|
|
case DBusValueType::ArrayOfString:
|
|
|
|
return std::make_unique<ASValue>(msg);
|
|
|
|
default:
|
|
|
|
return nullptr;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
int StringValue::openVariant() noexcept
|
|
|
|
{
|
|
|
|
return sd_bus_message_open_container(msgRef(), SD_BUS_TYPE_VARIANT, "s");
|
|
|
|
}
|
|
|
|
|
|
|
|
int StringValue::closeVariant() noexcept
|
|
|
|
{
|
|
|
|
return sd_bus_message_close_container(msgRef());
|
|
|
|
}
|
|
|
|
|
|
|
|
int StringValue::appendValue(std::string &&value) noexcept
|
|
|
|
{
|
|
|
|
return sd_bus_message_append(msgRef(), "s", value.data());
|
|
|
|
}
|
|
|
|
|
|
|
|
int ASValue::openVariant() noexcept
|
|
|
|
{
|
|
|
|
return sd_bus_message_open_container(msgRef(), SD_BUS_TYPE_VARIANT, "as");
|
|
|
|
}
|
|
|
|
|
|
|
|
int ASValue::closeVariant() noexcept
|
|
|
|
{
|
|
|
|
return sd_bus_message_close_container(msgRef());
|
|
|
|
}
|
|
|
|
|
|
|
|
int ASValue::appendValue(std::string &&value) noexcept
|
|
|
|
{
|
|
|
|
std::string envs{std::move(value)};
|
|
|
|
std::istringstream stream{envs};
|
|
|
|
int ret{0};
|
|
|
|
|
|
|
|
if (ret = sd_bus_message_open_container(msgRef(), SD_BUS_TYPE_ARRAY, "s"); ret < 0) {
|
|
|
|
return ret;
|
|
|
|
}
|
|
|
|
|
|
|
|
for (std::string line; std::getline(stream, line, ';');) {
|
|
|
|
if (ret = sd_bus_message_append(msgRef(), "s", line.data()); ret < 0) {
|
|
|
|
return ret;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return sd_bus_message_close_container(msgRef());
|
|
|
|
}
|