blob: d4580c9b2d6b4d12fc5148fd8383640a13ed8062 [file] [log] [blame]
#include <algorithm>
#include <sdbusplus/server.hpp>
#include <sdbusplus/exception.hpp>
#include <org/openbmc/Associations/server.hpp>
namespace sdbusplus
{
namespace org
{
namespace openbmc
{
namespace server
{
Associations::Associations(bus::bus& bus, const char* path)
: _org_openbmc_Associations_interface(
bus, path, _interface, _vtable, this)
{
}
Associations::Associations(bus::bus& bus, const char* path,
const std::map<std::string, PropertiesVariant>& vals)
: Associations(bus, path)
{
for (const auto& v : vals)
{
setPropertyByName(v.first, v.second);
}
}
auto Associations::associations() const ->
std::vector<std::tuple<std::string, std::string, std::string>>
{
return _associations;
}
int Associations::_callback_get_associations(
sd_bus* bus, const char* path, const char* interface,
const char* property, sd_bus_message* reply, void* context,
sd_bus_error* error)
{
using sdbusplus::server::binding::details::convertForMessage;
try
{
auto m = message::message(reply);
#ifndef DISABLE_TRANSACTION
{
auto tbus = m.get_bus();
sdbusplus::server::transaction::Transaction t(tbus, m);
sdbusplus::server::transaction::set_id
(std::hash<sdbusplus::server::transaction::Transaction>{}(t));
}
#endif
auto o = static_cast<Associations*>(context);
m.append(convertForMessage(o->associations()));
}
catch(sdbusplus::internal_exception_t& e)
{
sd_bus_error_set_const(error, e.name(), e.description());
return -EINVAL;
}
return true;
}
auto Associations::associations(std::vector<std::tuple<std::string, std::string, std::string>> value) ->
std::vector<std::tuple<std::string, std::string, std::string>>
{
if (_associations != value)
{
_associations = value;
_org_openbmc_Associations_interface.property_changed("associations");
}
return _associations;
}
int Associations::_callback_set_associations(
sd_bus* bus, const char* path, const char* interface,
const char* property, sd_bus_message* value, void* context,
sd_bus_error* error)
{
try
{
auto m = message::message(value);
#ifndef DISABLE_TRANSACTION
{
auto tbus = m.get_bus();
sdbusplus::server::transaction::Transaction t(tbus, m);
sdbusplus::server::transaction::set_id
(std::hash<sdbusplus::server::transaction::Transaction>{}(t));
}
#endif
auto o = static_cast<Associations*>(context);
std::vector<std::tuple<std::string, std::string, std::string>> v{};
m.read(v);
o->associations(v);
}
catch(sdbusplus::internal_exception_t& e)
{
sd_bus_error_set_const(error, e.name(), e.description());
return -EINVAL;
}
return true;
}
namespace details
{
namespace Associations
{
static const auto _property_associations =
utility::tuple_to_array(message::types::type_id<
std::vector<std::tuple<std::string, std::string, std::string>>>());
}
}
void Associations::setPropertyByName(const std::string& name,
const PropertiesVariant& val)
{
if (name == "associations")
{
auto& v = message::variant_ns::get<std::vector<std::tuple<std::string, std::string, std::string>>>(val);
associations(v);
return;
}
}
auto Associations::getPropertyByName(const std::string& name) ->
PropertiesVariant
{
if (name == "associations")
{
return associations();
}
return PropertiesVariant();
}
const vtable::vtable_t Associations::_vtable[] = {
vtable::start(),
vtable::property("associations",
details::Associations::_property_associations
.data(),
_callback_get_associations,
_callback_set_associations,
vtable::property_::emits_change),
vtable::end()
};
} // namespace server
} // namespace openbmc
} // namespace org
} // namespace sdbusplus