Source code for bot_api.mapper.bullet_state_mapper
from typing import Sequence, overload
from ..bullet_state import BulletState
from robocode_tank_royale.schema import BulletState as SchemaBulletState
def _map_bullet_state(
source: SchemaBulletState | None,
) -> BulletState | None:
"""Map a schema BulletState to a bot-api BulletState."""
if source is None:
return None
return BulletState(
source.bullet_id,
source.owner_id,
source.power,
source.x,
source.y,
source.direction,
source.color # type: ignore
)
[docs]
class BulletStateMapper:
"""Utility class for mapping bullet states."""
@overload
@staticmethod
def map(source: SchemaBulletState) -> BulletState:
"""Map a schema BulletState to a bot-api BulletState."""
...
@overload
@staticmethod
def map(source: Sequence[SchemaBulletState | None]) -> Sequence[BulletState | None]:
"""Map a sequence of schema BulletState to a sequence of bot-api BulletState."""
...
@overload
@staticmethod
def map(source: None) -> None:
"""Map a sequence of schema BulletState to a sequence of bot-api BulletState."""
...
[docs]
@staticmethod
def map(
source: SchemaBulletState | Sequence[SchemaBulletState | None] | None,
) -> BulletState | Sequence[BulletState | None] | None:
"""Map a schema BulletState to a bot-api BulletState."""
if source is None:
return None
if isinstance(source, Sequence):
return [_map_bullet_state(s) for s in source]
return _map_bullet_state(source)