diff --git a/src/types/error_type.hpp b/src/types/error_type.hpp
index 00e9bb1..ae2dd4b 100644
--- a/src/types/error_type.hpp
+++ b/src/types/error_type.hpp
@@ -23,9 +23,9 @@
     static constexpr auto propertyName = ConstexprString{"ErrorType"};
 };
 
-constexpr auto convDataErrorType =
-    std::array{std::make_pair<std::string_view, ErrorType>(
-        "PropertyConflict", ErrorType::propertyConflict)};
+constexpr auto convDataErrorType = std::array{
+    std::make_pair<std::string_view, ErrorType>("PropertyConflict",
+                                                ErrorType::propertyConflict)};
 
 inline ErrorType toErrorType(std::underlying_type_t<ErrorType> value)
 {
diff --git a/src/types/readings.cpp b/src/types/readings.cpp
index 2f6246b..5782158 100644
--- a/src/types/readings.cpp
+++ b/src/types/readings.cpp
@@ -9,11 +9,11 @@
 
 LabeledReadings toLabeledReadings(const Readings& readings)
 {
-    return LabeledReadings{
-        std::get<0>(readings),
-        utils::transform(std::get<1>(readings), [](const auto& readingData) {
-            return LabeledReadingData{readingData};
-        })};
+    return LabeledReadings{std::get<0>(readings),
+                           utils::transform(std::get<1>(readings),
+                                            [](const auto& readingData) {
+        return LabeledReadingData{readingData};
+                           })};
 }
 
 Readings toReadings(const LabeledReadings& labeledReadings)
@@ -21,8 +21,8 @@
     return Readings{labeledReadings.at_label<ts::Timestamp>(),
                     utils::transform(labeledReadings.at_label<ts::Readings>(),
                                      [](const auto& labeledReadingData) {
-                                         return labeledReadingData.to_tuple();
-                                     })};
+        return labeledReadingData.to_tuple();
+                    })};
 }
 
 } // namespace utils
diff --git a/src/types/report_types.cpp b/src/types/report_types.cpp
index 72bce4b..4fb0b4e 100644
--- a/src/types/report_types.cpp
+++ b/src/types/report_types.cpp
@@ -7,21 +7,20 @@
 {
     namespace ts = utils::tstring;
 
-    return utils::transform(
-        labeled, [](const LabeledMetricParameters& metricParams) {
-            return ReadingParameters::value_type(
-                utils::transform(
-                    metricParams.at_label<ts::SensorPath>(),
-                    [](const LabeledSensorInfo& sensorParameters) {
-                        return std::tuple<sdbusplus::message::object_path,
-                                          std::string>(
-                            sensorParameters.at_label<ts::Path>(),
-                            sensorParameters.at_label<ts::Metadata>());
-                    }),
-                utils::enumToString(metricParams.at_label<ts::OperationType>()),
-                metricParams.at_label<ts::Id>(),
-                utils::enumToString(
-                    metricParams.at_label<ts::CollectionTimeScope>()),
-                metricParams.at_label<ts::CollectionDuration>().t.count());
-        });
+    return utils::transform(labeled,
+                            [](const LabeledMetricParameters& metricParams) {
+        return ReadingParameters::value_type(
+            utils::transform(
+                metricParams.at_label<ts::SensorPath>(),
+                [](const LabeledSensorInfo& sensorParameters) {
+            return std::tuple<sdbusplus::message::object_path, std::string>(
+                sensorParameters.at_label<ts::Path>(),
+                sensorParameters.at_label<ts::Metadata>());
+                }),
+            utils::enumToString(metricParams.at_label<ts::OperationType>()),
+            metricParams.at_label<ts::Id>(),
+            utils::enumToString(
+                metricParams.at_label<ts::CollectionTimeScope>()),
+            metricParams.at_label<ts::CollectionDuration>().t.count());
+    });
 }
diff --git a/src/types/report_updates.hpp b/src/types/report_updates.hpp
index 8313a94..a3dfe81 100644
--- a/src/types/report_updates.hpp
+++ b/src/types/report_updates.hpp
@@ -25,13 +25,13 @@
     static constexpr auto propertyName = ConstexprString{"ReportUpdates"};
 };
 
-constexpr auto convDataReportUpdates =
-    std::array{std::make_pair<std::string_view, ReportUpdates>(
-                   "Overwrite", ReportUpdates::overwrite),
-               std::make_pair<std::string_view, ReportUpdates>(
-                   "AppendStopsWhenFull", ReportUpdates::appendStopsWhenFull),
-               std::make_pair<std::string_view, ReportUpdates>(
-                   "AppendWrapsWhenFull", ReportUpdates::appendWrapsWhenFull)};
+constexpr auto convDataReportUpdates = std::array{
+    std::make_pair<std::string_view, ReportUpdates>("Overwrite",
+                                                    ReportUpdates::overwrite),
+    std::make_pair<std::string_view, ReportUpdates>(
+        "AppendStopsWhenFull", ReportUpdates::appendStopsWhenFull),
+    std::make_pair<std::string_view, ReportUpdates>(
+        "AppendWrapsWhenFull", ReportUpdates::appendWrapsWhenFull)};
 
 inline ReportUpdates
     toReportUpdates(std::underlying_type_t<ReportUpdates> value)
