From df0c17bf0a9c27d87673476e63c9587d538068d4 Mon Sep 17 00:00:00 2001 From: Erik Friese Date: Tue, 29 Aug 2023 18:08:59 +0200 Subject: [PATCH] optional support --- betterproto-extras/src/descriptor_pool.rs | 2 ++ example.py | 5 +++-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/betterproto-extras/src/descriptor_pool.rs b/betterproto-extras/src/descriptor_pool.rs index 90b0e98..0d2bc24 100644 --- a/betterproto-extras/src/descriptor_pool.rs +++ b/betterproto-extras/src/descriptor_pool.rs @@ -68,6 +68,8 @@ fn create_cached_descriptor_in_pool<'py>( if meta.is_list_field(field_name)? { field.set_label(Label::Repeated); + } else if field_meta.getattr("optional")?.extract::()? { + field.proto3_optional = Some(true); } if let Some(grp) = meta.oneof_group(field_name)? { diff --git a/example.py b/example.py index 2f1048a..627b359 100644 --- a/example.py +++ b/example.py @@ -3,7 +3,7 @@ import betterproto from dataclasses import dataclass -from typing import List +from typing import List, Optional @dataclass(repr=False) class Baz(betterproto.Message): @@ -11,6 +11,7 @@ class Baz(betterproto.Message): b: int = betterproto.int64_field(2, group = "x") c: float = betterproto.float_field(3, group = "y") d: int = betterproto.int64_field(4, group = "y") + e: Optional[int] = betterproto.int32_field(5, group = "_e", optional = True) @dataclass(repr=False) class Foo(betterproto.Message): @@ -28,7 +29,7 @@ class Bar(betterproto.Message): buffer = bytes( Bar( foo1=Foo(1, 2.34), - foo2=Foo(3, 4.56, [Baz(a = 1.234), Baz(b = 5), Baz(b = 2, d = 3)]), + foo2=Foo(3, 4.56, [Baz(a = 1.234), Baz(b = 5, e=1), Baz(b = 2, d = 3)]), packed=[5, 3, 1] ) )