xref: /openbmc/sdbusplus/tools/sdbusplus/templates/property.server.cpp.mako (revision a4bfefde28e409148a3bd4e0c65d1f2d00007aed)
13a1d8b97SPatrick Williamsauto ${interface.classname}::${property.camelCase}() const ->
23a1d8b97SPatrick Williams        ${property.cppTypeParam(interface.name)}
33a1d8b97SPatrick Williams{
43a1d8b97SPatrick Williams    return _${property.camelCase};
53a1d8b97SPatrick Williams}
63a1d8b97SPatrick Williams
73a1d8b97SPatrick Williamsint ${interface.classname}::_callback_get_${property.name}(
83a1d8b97SPatrick Williams        sd_bus* /*bus*/, const char* /*path*/, const char* /*interface*/,
93a1d8b97SPatrick Williams        const char* /*property*/, sd_bus_message* reply, void* context,
103a1d8b97SPatrick Williams        sd_bus_error* error)
113a1d8b97SPatrick Williams{
123a1d8b97SPatrick Williams    auto o = static_cast<${interface.classname}*>(context);
133a1d8b97SPatrick Williams
143a1d8b97SPatrick Williams    try
153a1d8b97SPatrick Williams    {
163a1d8b97SPatrick Williams        return sdbusplus::sdbuspp::property_callback(
173a1d8b97SPatrick Williams                reply, o->get_bus().getInterface(), error,
183a1d8b97SPatrick Williams                std::function(
193a1d8b97SPatrick Williams                    [=]()
203a1d8b97SPatrick Williams                    {
213a1d8b97SPatrick Williams                        return o->${property.camelCase}();
223a1d8b97SPatrick Williams                    }
233a1d8b97SPatrick Williams                ));
243a1d8b97SPatrick Williams    }
253a1d8b97SPatrick Williams    % for e in property.errors:
263a1d8b97SPatrick Williams    catch(const ${interface.errorNamespacedClass(e)}& e)
273a1d8b97SPatrick Williams    {
28*a4bfefdeSPatrick Williams        return e.set_error(o->get_bus().getInterface(), error);
293a1d8b97SPatrick Williams    }
303a1d8b97SPatrick Williams    % endfor
313a1d8b97SPatrick Williams    catch (const std::exception&)
323a1d8b97SPatrick Williams    {
333a1d8b97SPatrick Williams        o->get_bus().set_current_exception(std::current_exception());
343a1d8b97SPatrick Williams        return 1;
353a1d8b97SPatrick Williams    }
363a1d8b97SPatrick Williams}
373a1d8b97SPatrick Williams
383a1d8b97SPatrick Williamsauto ${interface.classname}::${property.camelCase}(${property.cppTypeParam(interface.name)} value,
393a1d8b97SPatrick Williams                                         bool skipSignal) ->
403a1d8b97SPatrick Williams        ${property.cppTypeParam(interface.name)}
413a1d8b97SPatrick Williams{
423a1d8b97SPatrick Williams    if (_${property.camelCase} != value)
433a1d8b97SPatrick Williams    {
443a1d8b97SPatrick Williams        _${property.camelCase} = value;
453a1d8b97SPatrick Williams        if (!skipSignal)
463a1d8b97SPatrick Williams        {
473a1d8b97SPatrick Williams            _${interface.joinedName("_", "interface")}.property_changed("${property.name}");
483a1d8b97SPatrick Williams        }
493a1d8b97SPatrick Williams    }
503a1d8b97SPatrick Williams
513a1d8b97SPatrick Williams    return _${property.camelCase};
523a1d8b97SPatrick Williams}
533a1d8b97SPatrick Williams
543a1d8b97SPatrick Williamsauto ${interface.classname}::${property.camelCase}(${property.cppTypeParam(interface.name)} val) ->
553a1d8b97SPatrick Williams        ${property.cppTypeParam(interface.name)}
563a1d8b97SPatrick Williams{
573a1d8b97SPatrick Williams    return ${property.camelCase}(val, false);
583a1d8b97SPatrick Williams}
593a1d8b97SPatrick Williams
603a1d8b97SPatrick Williams% if 'const' not in property.flags and 'readonly' not in property.flags:
613a1d8b97SPatrick Williamsint ${interface.classname}::_callback_set_${property.name}(
623a1d8b97SPatrick Williams        sd_bus* /*bus*/, const char* /*path*/, const char* /*interface*/,
633a1d8b97SPatrick Williams        const char* /*property*/, sd_bus_message* value, void* context,
643a1d8b97SPatrick Williams        sd_bus_error* error)
653a1d8b97SPatrick Williams{
663a1d8b97SPatrick Williams    auto o = static_cast<${interface.classname}*>(context);
673a1d8b97SPatrick Williams
683a1d8b97SPatrick Williams    try
693a1d8b97SPatrick Williams    {
703a1d8b97SPatrick Williams        return sdbusplus::sdbuspp::property_callback(
713a1d8b97SPatrick Williams                value, o->get_bus().getInterface(), error,
723a1d8b97SPatrick Williams                std::function(
733a1d8b97SPatrick Williams                    [=](${property.cppTypeParam(interface.name)}&& arg)
743a1d8b97SPatrick Williams                    {
753a1d8b97SPatrick Williams                        o->${property.camelCase}(std::move(arg));
763a1d8b97SPatrick Williams                    }
773a1d8b97SPatrick Williams                ));
783a1d8b97SPatrick Williams    }
793a1d8b97SPatrick Williams    % for e in property.errors:
803a1d8b97SPatrick Williams    catch(const ${interface.errorNamespacedClass(e)}& e)
813a1d8b97SPatrick Williams    {
82*a4bfefdeSPatrick Williams        return e.set_error(o->get_bus().getInterface(), error);
833a1d8b97SPatrick Williams    }
843a1d8b97SPatrick Williams    % endfor
853a1d8b97SPatrick Williams    catch (const std::exception&)
863a1d8b97SPatrick Williams    {
873a1d8b97SPatrick Williams        o->get_bus().set_current_exception(std::current_exception());
883a1d8b97SPatrick Williams        return 1;
893a1d8b97SPatrick Williams    }
903a1d8b97SPatrick Williams}
913a1d8b97SPatrick Williams% endif
923a1d8b97SPatrick Williams
933a1d8b97SPatrick Williamsnamespace details
943a1d8b97SPatrick Williams{
953a1d8b97SPatrick Williamsnamespace ${interface.classname}
963a1d8b97SPatrick Williams{
973a1d8b97SPatrick Williamsstatic const auto _property_${property.name} =
983a1d8b97SPatrick Williams    utility::tuple_to_array(message::types::type_id<
993a1d8b97SPatrick Williams            ${property.cppTypeParam(interface.name, full=True)}>());
1003a1d8b97SPatrick Williams}
1013a1d8b97SPatrick Williams}
102