From 2a3e1e1827d97abe6f7bf1e332e0593315793781 Mon Sep 17 00:00:00 2001 From: boukeversteegh Date: Fri, 29 May 2020 15:37:14 +0200 Subject: [PATCH] Add basic support for all google.protobuf types --- betterproto/plugin.py | 8 ++++++++ betterproto/tests/inputs/googletypes/googletypes.json | 4 +++- betterproto/tests/inputs/googletypes/googletypes.proto | 2 ++ 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/betterproto/plugin.py b/betterproto/plugin.py index 4be1d21..96cb12d 100755 --- a/betterproto/plugin.py +++ b/betterproto/plugin.py @@ -88,6 +88,14 @@ def get_ref_type( cased = [stringcase.pascalcase(part) for part in parts] type_name = f'"{"".join(cased)}"' + # Use precompiled classes for google.protobuf.* objects + if type_name.startswith("google.protobuf.") and type_name.count(".") == 2: + type_name = type_name.rsplit(".", maxsplit=1)[1] + import_package = "betterproto.lib.google.protobuf" + import_alias = safe_snake_case(import_package) + imports.add(f"import {import_package} as {import_alias}") + return f"{import_alias}.{type_name}" + if "." in type_name: # This is imported from another package. No need # to use a forward ref and we need to add the import. diff --git a/betterproto/tests/inputs/googletypes/googletypes.json b/betterproto/tests/inputs/googletypes/googletypes.json index 5d86e1b..0a002e9 100644 --- a/betterproto/tests/inputs/googletypes/googletypes.json +++ b/betterproto/tests/inputs/googletypes/googletypes.json @@ -1,5 +1,7 @@ { "maybe": false, "ts": "1972-01-01T10:00:20.021Z", - "duration": "1.200s" + "duration": "1.200s", + "important": 10, + "empty": {} } diff --git a/betterproto/tests/inputs/googletypes/googletypes.proto b/betterproto/tests/inputs/googletypes/googletypes.proto index 283b836..ba3db12 100644 --- a/betterproto/tests/inputs/googletypes/googletypes.proto +++ b/betterproto/tests/inputs/googletypes/googletypes.proto @@ -3,10 +3,12 @@ syntax = "proto3"; import "google/protobuf/duration.proto"; import "google/protobuf/timestamp.proto"; import "google/protobuf/wrappers.proto"; +import "google/protobuf/empty.proto"; message Test { google.protobuf.BoolValue maybe = 1; google.protobuf.Timestamp ts = 2; google.protobuf.Duration duration = 3; google.protobuf.Int32Value important = 4; + google.protobuf.Empty empty = 5; }