1 #pragma once 2 3 namespace phosphor 4 { 5 namespace fan 6 { 7 namespace control 8 { 9 namespace handler 10 { 11 12 /** 13 * @brief A handler function to set/update a property 14 * @details Sets or updates a property's value determined by a combination of 15 * an object's path and property names 16 * 17 * @param[in] path - Object's path name 18 * @param[in] interface - Object's interface name 19 * @param[in] property - Object's property name 20 * 21 * @return Lambda function 22 * A lambda function to set/update the property value 23 */ 24 template <typename T> 25 auto setProperty(const char* path, const char* interface, const char* property) 26 { 27 return [=](auto& zone, T&& arg) 28 { 29 zone.setPropertyValue(path, interface, property, std::forward<T>(arg)); 30 }; 31 } 32 33 /** 34 * @brief A handler function to set/update service name owner state 35 * @details Sets or updates service name owner state used by a group where 36 * a service name without an owner represents the service no longer exists 37 * 38 * @param[in] group - Group associated with a service 39 * 40 * @return Lambda function 41 * A lambda function to set/update the service name owner state 42 */ 43 auto setService(Group&& group) 44 { 45 return [group = std::move(group)](auto& zone, auto& name, bool hasOwner) 46 { 47 // Update service name owner state list of a group 48 zone.setServiceOwner(&group, name, hasOwner); 49 }; 50 } 51 52 /** 53 * @brief A handler function to remove an interface from an object path 54 * @details Removes an interface from an object's path which includes removing 55 * all properties that would be under that interface 56 * 57 * @param[in] path - Object's path name 58 * @param[in] interface - Object's interface name 59 * 60 * @return Lambda function 61 * A lambda function to remove the interface 62 */ 63 auto removeInterface(const char* path, const char* interface) 64 { 65 return[=](auto& zone) 66 { 67 zone.removeObjectInterface(path, interface); 68 }; 69 } 70 71 } // namespace handler 72 } // namespace control 73 } // namespace fan 74 } // namespace phosphor 75