mirror of
https://github.com/dcs-retribution/dcs-retribution.git
synced 2025-11-10 15:41:24 +00:00
21 lines
545 B
Python
21 lines
545 B
Python
from __future__ import annotations
|
|
|
|
from typing import Callable, TypeGuard, TypeVar
|
|
|
|
SelfT = TypeVar("SelfT")
|
|
BaseT = TypeVar("BaseT")
|
|
GuardT = TypeVar("GuardT")
|
|
|
|
|
|
def self_type_guard(
|
|
f: Callable[[SelfT, BaseT], TypeGuard[GuardT]],
|
|
) -> Callable[[SelfT, BaseT], TypeGuard[GuardT]]:
|
|
def decorator(s: SelfT, arg: BaseT) -> TypeGuard[GuardT]:
|
|
if id(s) != id(arg):
|
|
raise ValueError(
|
|
"self type guards must be called with self as the argument"
|
|
)
|
|
return f(s, arg)
|
|
|
|
return decorator
|