From 8a89e76966aeb8067fe1369d4da0721bee0b4e9c Mon Sep 17 00:00:00 2001 From: David Jablonski Date: Sat, 29 Jan 2022 14:14:55 +0100 Subject: [PATCH 1/2] protoc_gen_mavsdk: error on missing return value When defining a rpc function with a return stream, it is necessary that this function returns something that is not a *Result. So the Response proto must contain more than just the result entry. Here we give an explicit error message, so that the developer knows precisely what is missing. --- pb_plugins/protoc_gen_mavsdk/methods.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/pb_plugins/protoc_gen_mavsdk/methods.py b/pb_plugins/protoc_gen_mavsdk/methods.py index 46c73ddf2..130206dbb 100644 --- a/pb_plugins/protoc_gen_mavsdk/methods.py +++ b/pb_plugins/protoc_gen_mavsdk/methods.py @@ -74,6 +74,10 @@ def extract_return_type_and_name(self, pb_method, responses): self._return_name = name_parser_factory.create( return_params[0]['field'].json_name) self._return_description = return_params[0]['docs'] + elif len(return_params) == 0 and self.return_type_required: + raise Exception( + "Responses must have 1 return parameter" + + f"(and an optional '*Result')!\nError in {method_output}") def extract_async_type(self, pb_method): self._is_sync = True @@ -119,6 +123,10 @@ def package(self): def name(self): return self._name + @property + def return_type_required(self): + return False + @staticmethod def collect_methods( plugin_name, @@ -270,6 +278,10 @@ def __init__( remove_subscribe(pb_method.name)) self._template = template_env.get_template("stream.j2") + @property + def return_type_required(self): + return True + def __repr__(self): return self._template.render( name=self._name, From 4bc0d91f2257dc14f1299c7bce0af8b96cece73d Mon Sep 17 00:00:00 2001 From: David Jablonski Date: Sat, 29 Jan 2022 14:23:05 +0100 Subject: [PATCH 2/2] improved wording --- pb_plugins/protoc_gen_mavsdk/methods.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pb_plugins/protoc_gen_mavsdk/methods.py b/pb_plugins/protoc_gen_mavsdk/methods.py index 130206dbb..16c9111dc 100644 --- a/pb_plugins/protoc_gen_mavsdk/methods.py +++ b/pb_plugins/protoc_gen_mavsdk/methods.py @@ -66,7 +66,7 @@ def extract_return_type_and_name(self, pb_method, responses): if len(return_params) > 1: raise Exception( "Responses cannot have more than 1 return parameter" + - f"(and an optional '*Result')!\nError in {method_output}") + f" (and an optional '*Result')!\nError in {method_output}") if len(return_params) == 1: self._return_type = type_info_factory.create( @@ -76,8 +76,8 @@ def extract_return_type_and_name(self, pb_method, responses): self._return_description = return_params[0]['docs'] elif len(return_params) == 0 and self.return_type_required: raise Exception( - "Responses must have 1 return parameter" + - f"(and an optional '*Result')!\nError in {method_output}") + "This response must have 1 return parameter" + + f" (and an optional '*Result')!\nError in {method_output}") def extract_async_type(self, pb_method): self._is_sync = True