Support optional conditions on creating fans

This adds the functional infrastructure to optionally attach a condition
function to a fan definition. When a condition is defined on a fan, it
must be true for a fan's associated functional properties to be created.
When the given condition fails, that fan's functional properties will
not be created by fan monitor. A fan without a defined condition will
have all of its associated functional properties created.

Example of generated condition (generation commit to follow):

make_condition(condition::propertiesMatch(
    std::vector<PropertyState>{
        PropertyState{
            PropertyIdentity{
                "/xyz/openbmc_project/inventory/system/chassis",
                "xyz.openbmc_project.Inventory.Decorator.CoolingType",
                "WaterCooled"
            },
            static_cast<bool>(false)
        }
    }
)),

Tested:
    Fan functional properties are not created when a condition fails
    Fan functional properties are created when condition passes
    Fan functional properties are created when no condition exists

Change-Id: I9ced2e520d2f97e6655c9417970b3e976d78fef4
Signed-off-by: Matthew Barth <msbarth@us.ibm.com>
diff --git a/monitor/main.cpp b/monitor/main.cpp
index 060f27a..84dd7d1 100644
--- a/monitor/main.cpp
+++ b/monitor/main.cpp
@@ -72,6 +72,16 @@
 
     for (const auto& fanDef : fanDefinitions)
     {
+        // Check if a condition exists on the fan
+        auto condition = std::get<conditionField>(fanDef);
+        if (condition)
+        {
+            // Condition exists, skip adding fan if it fails
+            if (!(*condition)(bus))
+            {
+                continue;
+            }
+        }
         fans.emplace_back(std::make_unique<Fan>(
                 mode, bus, eventPtr, trust, fanDef));
     }