From d640f21107487b19101ec5b148b76f885a6b82c4 Mon Sep 17 00:00:00 2001 From: rus07tam Date: Mon, 27 Oct 2025 11:16:49 +0000 Subject: [PATCH] feat(field): add get_fields method --- src/snakia/field/field.py | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/snakia/field/field.py b/src/snakia/field/field.py index c59c8ae..4fdc9d6 100644 --- a/src/snakia/field/field.py +++ b/src/snakia/field/field.py @@ -36,14 +36,24 @@ class Field[T: Any](ABC, PrivProperty[T]): @classmethod def custom[R]( cls: type[Field[Any]], - serialize: Callable[[R], str], - deserialize: Callable[[str], R], + serialize: Callable[[Field[R], R], bytes], + deserialize: Callable[[Field[R], bytes], R], ) -> type[Field[R]]: return inherit( cls, {"serialize": serialize, "deserialize": deserialize} ) + @final + @staticmethod + def get_fields(class_: type[Any] | Any, /) -> dict[str, Field[Any]]: + if not isinstance(class_, type): + class_ = class_.__class__ + return { + k: v for k, v in class_.__dict__.items() if isinstance(v, Field) + } + if TYPE_CHECKING: + @final @classmethod def type(cls) -> type[T]: ...