Release/v0.6.0 #12

Merged
rus07tam merged 13 commits from release/v0.6.0 into main 2025-11-26 17:17:42 +03:00
3 changed files with 32 additions and 0 deletions
Showing only changes of commit 36d9da10bc - Show all commits

View file

@ -4,6 +4,7 @@ from .field import Field
from .float import FloatField
from .int import IntField
from .list import ListField
from .optional import OptionalField
from .str import StrField
__all__ = [
@ -13,5 +14,6 @@ __all__ = [
"FloatField",
"IntField",
"ListField",
"OptionalField",
"StrField",
]

View file

@ -0,0 +1,28 @@
from typing import Final, TypeVar
from .field import Field
T = TypeVar("T")
class OptionalField(Field[T | None]):
def __init__(
self,
field: Field[T],
*,
none_value: bytes = b"",
) -> None:
super().__init__(None)
self.none_value: Final = none_value
self.field: Final = field
def serialize(self, value: T | None, /) -> bytes:
if value is None:
return self.none_value
return self.field.serialize(value)
def deserialize(self, serialized: bytes, /) -> T | None:
if serialized == self.none_value:
return None
return self.field.deserialize(serialized)

View file

@ -5,6 +5,7 @@ from .field import Field as field
from .float import FloatField as float
from .int import IntField as int
from .list import ListField as list
from .optional import OptionalField as optional
from .str import StrField as str
__all__ = [
@ -14,5 +15,6 @@ __all__ = [
"float",
"int",
"list",
"optional",
"str",
]