diff --git a/errors.hpp b/errors.hpp
index 1fa4492..cc3e306 100644
--- a/errors.hpp
+++ b/errors.hpp
@@ -17,31 +17,29 @@
  */
 class InterfaceError final : public std::invalid_argument
 {
-    public:
-        ~InterfaceError() = default;
-        InterfaceError() = delete;
-        InterfaceError(const InterfaceError&) = delete;
-        InterfaceError(InterfaceError&&) = default;
-        InterfaceError& operator=(const InterfaceError&) = delete;
-        InterfaceError& operator=(InterfaceError&&) = default;
+  public:
+    ~InterfaceError() = default;
+    InterfaceError() = delete;
+    InterfaceError(const InterfaceError&) = delete;
+    InterfaceError(InterfaceError&&) = default;
+    InterfaceError& operator=(const InterfaceError&) = delete;
+    InterfaceError& operator=(InterfaceError&&) = default;
 
-        /** @brief Construct an interface error.
-         *
-         *  @param[in] msg - The message to be returned by what().
-         *  @param[in] iface - The failing interface name.
-         */
-        InterfaceError(
-            const char* msg,
-            const std::string& iface) :
-            std::invalid_argument(msg),
-            interface(iface) {}
+    /** @brief Construct an interface error.
+     *
+     *  @param[in] msg - The message to be returned by what().
+     *  @param[in] iface - The failing interface name.
+     */
+    InterfaceError(const char* msg, const std::string& iface) :
+        std::invalid_argument(msg), interface(iface)
+    {
+    }
 
-        /** @brief Log the exception message to the systemd journal. */
-        void log() const;
+    /** @brief Log the exception message to the systemd journal. */
+    void log() const;
 
-    private:
-
-        std::string interface;
+  private:
+    std::string interface;
 };
 
 } // namespace manager
