From 61f493ed316392888cd81df9d9a243995b4c4eee Mon Sep 17 00:00:00 2001
From: Tim-Oliver Husser <thusser@uni-goettingen.de>
Date: Mon, 15 Aug 2022 13:21:18 +0200
Subject: [PATCH] added possibility to decorate async methods with @method

---
 dbus_next/service.py | 13 ++++++++++---
 1 file changed, 10 insertions(+), 3 deletions(-)

diff --git a/dbus_next/service.py b/dbus_next/service.py
index b2a96cf..ceec6a9 100644
--- a/dbus_next/service.py
+++ b/dbus_next/service.py
@@ -90,10 +90,17 @@ def decorator(fn):
         def wrapped(*args, **kwargs):
             fn(*args, **kwargs)
 
-        fn_name = name if name else fn.__name__
-        wrapped.__dict__['__DBUS_METHOD'] = _Method(fn, fn_name, disabled=disabled)
+        @wraps(fn)
+        async def async_wrapped(*args, **kwargs):
+            await fn(*args, **kwargs)
 
-        return wrapped
+        fn_name = name if name else fn.__name__
+        if asyncio.iscoroutinefunction(fn):
+            async_wrapped.__dict__["__DBUS_METHOD"] = _Method(fn, fn_name, disabled=disabled)
+            return async_wrapped
+        else:
+            wrapped.__dict__["__DBUS_METHOD"] = _Method(fn, fn_name, disabled=disabled)
+            return wrapped
 
     return decorator