Source code for libretro.drivers.user.default

"""
A user driver with configurable username and language.

.. seealso::

    :mod:`libretro.api.user`
        Defines the language and username types this driver supplies.
"""

from typing import override

from libretro.api.user import Language

from .driver import UserDriver


[docs] class DefaultUserDriver(UserDriver): """A :class:`.UserDriver` with configurable username and language."""
[docs] def __init__( self, username: str | bytes | None = "libretro.py", language: Language | None = Language.ENGLISH, ): """ :param username: The player username to expose to cores. :class:`str` values are encoded to :class:`bytes` via UTF-8. :obj:`None` disables ``RETRO_ENVIRONMENT_GET_USERNAME``. :param language: The UI language to expose to cores. Defaults to :attr:`~libretro.api.user.Language.ENGLISH`. :raises TypeError: If either argument is not of the expected type. """ self.username = username self.language = Language(language)
@property @override def username(self) -> bytes | None: return self._username @username.setter def username(self, username: str | bytes | None) -> None: match username: case None: self._username: bytes | None = None case str(): self._username: bytes | None = username.encode() case bytes(): self._username: bytes | None = username case _: raise TypeError(f"Expected str, bytes, or None, got {type(username).__name__}") @username.deleter def username(self) -> None: self._username = None @property @override def language(self) -> Language | None: return self._language @language.setter def language(self, language: Language | None) -> None: if not isinstance(language, (Language, int, type(None))): raise TypeError(f"Expected Language or int or None, got {type(language).__name__}") self._language = Language(language) @language.deleter def language(self) -> None: self._language = None
__all__ = ["DefaultUserDriver"]