from typing import Protocol, runtime_checkable


@runtime_checkable
class LockProtocol(Protocol):
    async def lock(self) -> None: ...
    async def unlock(self) -> None: ...
    async def open(self) -> None: ...
    async def close(self) -> None: ...

    @property
    def is_locked(self) -> bool: ...

    @property
    def is_locking(self) -> bool: ...

    @property
    def is_unlocking(self) -> bool: ...

    @property
    def is_open(self) -> bool: ...

    @property
    def is_opening(self) -> bool: ...

    @property
    def is_closing(self) -> bool: ...

    @property
    def is_jammed(self) -> bool: ...

    def supports_lock(self) -> bool: ...
    def supports_open(self) -> bool: ...
    def supports_jam(self) -> bool: ...
