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