Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 23 additions & 0 deletions subprojects/robotpy-wpiutil/wpiutil/wpistruct/typing.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
from typing import ClassVar, Protocol

try:
from typing import TypeGuard
except ImportError:
try:
from typing_extensions import TypeGuard
except ImportError:
# Runtime fallback for Python 3.9 without typing_extensions
class TypeGuard:
def __class_getitem__(cls, key):
return bool


class StructSerializable(Protocol):
"""Any type that can be serialized or deserialized as a WPILib Struct."""

WPIStruct: ClassVar


def is_wpistruct_type(cls: type) -> TypeGuard[type[StructSerializable]]:
"""Returns True if the given type supports WPILib Struct serialization."""
return hasattr(cls, "WPIStruct")
Loading