optional support

This commit is contained in:
Erik Friese 2023-08-29 18:08:59 +02:00
parent d1825026db
commit df0c17bf0a
2 changed files with 5 additions and 2 deletions

View File

@ -68,6 +68,8 @@ fn create_cached_descriptor_in_pool<'py>(
if meta.is_list_field(field_name)? { if meta.is_list_field(field_name)? {
field.set_label(Label::Repeated); field.set_label(Label::Repeated);
} else if field_meta.getattr("optional")?.extract::<bool>()? {
field.proto3_optional = Some(true);
} }
if let Some(grp) = meta.oneof_group(field_name)? { if let Some(grp) = meta.oneof_group(field_name)? {

View File

@ -3,7 +3,7 @@
import betterproto import betterproto
from dataclasses import dataclass from dataclasses import dataclass
from typing import List from typing import List, Optional
@dataclass(repr=False) @dataclass(repr=False)
class Baz(betterproto.Message): class Baz(betterproto.Message):
@ -11,6 +11,7 @@ class Baz(betterproto.Message):
b: int = betterproto.int64_field(2, group = "x") b: int = betterproto.int64_field(2, group = "x")
c: float = betterproto.float_field(3, group = "y") c: float = betterproto.float_field(3, group = "y")
d: int = betterproto.int64_field(4, group = "y") d: int = betterproto.int64_field(4, group = "y")
e: Optional[int] = betterproto.int32_field(5, group = "_e", optional = True)
@dataclass(repr=False) @dataclass(repr=False)
class Foo(betterproto.Message): class Foo(betterproto.Message):
@ -28,7 +29,7 @@ class Bar(betterproto.Message):
buffer = bytes( buffer = bytes(
Bar( Bar(
foo1=Foo(1, 2.34), 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] packed=[5, 3, 1]
) )
) )