diff --git a/src/trigger_manager.cpp b/src/trigger_manager.cpp
index fc6bbcd..984b434 100644
--- a/src/trigger_manager.cpp
+++ b/src/trigger_manager.cpp
@@ -21,36 +21,33 @@
 {
     loadFromPersistent();
 
-    managerIface = objServer->add_unique_interface(
-        triggerManagerPath, triggerManagerIfaceName, [this](auto& iface) {
-            iface.register_method(
-                "AddTrigger",
-                [this](
-                    boost::asio::yield_context& yield, const std::string& id,
-                    const std::string& name,
-                    const std::vector<std::string>& triggerActions,
-                    const SensorsInfo& sensors,
-                    const std::vector<sdbusplus::message::object_path>& reports,
-                    const TriggerThresholdParamsExt& thresholds) {
-                    LabeledTriggerThresholdParams
-                        labeledTriggerThresholdParams = std::visit(
-                            utils::ToLabeledThresholdParamConversion(),
-                            thresholds);
+    managerIface = objServer->add_unique_interface(triggerManagerPath,
+                                                   triggerManagerIfaceName,
+                                                   [this](auto& iface) {
+        iface.register_method(
+            "AddTrigger",
+            [this](boost::asio::yield_context& yield, const std::string& id,
+                   const std::string& name,
+                   const std::vector<std::string>& triggerActions,
+                   const SensorsInfo& sensors,
+                   const std::vector<sdbusplus::message::object_path>& reports,
+                   const TriggerThresholdParamsExt& thresholds) {
+            LabeledTriggerThresholdParams labeledTriggerThresholdParams =
+                std::visit(utils::ToLabeledThresholdParamConversion(),
+                           thresholds);
 
-                    std::vector<LabeledSensorInfo> labeledSensorsInfo =
-                        triggerFactory->getLabeledSensorsInfo(yield, sensors);
+            std::vector<LabeledSensorInfo> labeledSensorsInfo =
+                triggerFactory->getLabeledSensorsInfo(yield, sensors);
 
-                    auto reportIds = utils::transform<std::vector>(
-                        reports, [](const auto& item) {
-                            return utils::reportPathToId(item);
-                        });
+            auto reportIds = utils::transform<std::vector>(
+                reports,
+                [](const auto& item) { return utils::reportPathToId(item); });
 
-                    return addTrigger(id, name, triggerActions,
-                                      labeledSensorsInfo, reportIds,
-                                      labeledTriggerThresholdParams)
-                        .getPath();
-                });
-        });
+            return addTrigger(id, name, triggerActions, labeledSensorsInfo,
+                              reportIds, labeledTriggerThresholdParams)
+                .getPath();
+            });
+    });
 }
 
 void TriggerManager::removeTrigger(const interfaces::Trigger* trigger)
