# This file is automatically generated by pyo3_stub_gen
# ruff: noqa: E501

import typing

from nautilus_trader import core
from nautilus_trader import model

__all__ = [
    "PostgresCacheConfig",
    "PostgresConnectOptions",
    "RedisCacheConfig",
    "RedisMessageBusBacking",
    "RedisMessageBusConfig",
    "RedisMessageBusFactory",
]

@typing.final
class PostgresCacheConfig:
    def __init__(
        self,
        host: str | None = None,
        port: int | None = None,
        username: str | None = None,
        password: str | None = None,
        database: str | None = None,
    ) -> None: ...
    @property
    def host(self) -> str | None: ...
    @property
    def port(self) -> int | None: ...
    @property
    def username(self) -> str | None: ...
    @property
    def password(self) -> str | None: ...
    @property
    def database(self) -> str | None: ...

@typing.final
class PostgresConnectOptions:
    def __init__(self, host: str, port: int, user: str, password: str, database: str) -> None: ...
    @property
    def host(self) -> str: ...
    @property
    def port(self) -> int: ...
    @property
    def username(self) -> str: ...
    @property
    def password(self) -> str: ...
    @property
    def database(self) -> str: ...

@typing.final
class RedisMessageBusBacking:
    def __init__(
        self, trader_id: model.TraderId, instance_id: core.UUID4, config_json: bytes
    ) -> None: ...
    def is_closed(self) -> bool: ...
    def publish(self, topic: str, payload: bytes) -> None: ...
    def stream(self, callback: typing.Any) -> typing.Any: ...
    def close(self) -> None: ...

@typing.final
class RedisMessageBusFactory:
    def __init__(self, config: RedisMessageBusConfig | None = None) -> None: ...

@typing.final
class RedisCacheConfig:
    def __init__(
        self,
        host: str | None = None,
        port: int | None = None,
        username: str | None = None,
        password: str | None = None,
        ssl: bool | None = None,
        connection_timeout: int | None = None,
        response_timeout: int | None = None,
        number_of_retries: int | None = None,
        exponent_base: int | None = None,
        max_delay: int | None = None,
        factor: int | None = None,
    ) -> None: ...
    @property
    def host(self) -> str | None: ...
    @property
    def port(self) -> int | None: ...
    @property
    def username(self) -> str | None: ...
    @property
    def password(self) -> str | None: ...
    @property
    def ssl(self) -> bool: ...
    @property
    def connection_timeout(self) -> int: ...
    @property
    def response_timeout(self) -> int: ...
    @property
    def number_of_retries(self) -> int: ...
    @property
    def exponent_base(self) -> int: ...
    @property
    def max_delay(self) -> int: ...
    @property
    def factor(self) -> int: ...

@typing.final
class RedisMessageBusConfig:
    def __init__(
        self,
        host: str | None = None,
        port: int | None = None,
        username: str | None = None,
        password: str | None = None,
        ssl: bool | None = None,
        connection_timeout: int | None = None,
        response_timeout: int | None = None,
        number_of_retries: int | None = None,
        exponent_base: int | None = None,
        max_delay: int | None = None,
        factor: int | None = None,
    ) -> None: ...
    @property
    def host(self) -> str | None: ...
    @property
    def port(self) -> int | None: ...
    @property
    def username(self) -> str | None: ...
    @property
    def password(self) -> str | None: ...
    @property
    def ssl(self) -> bool: ...
    @property
    def connection_timeout(self) -> int: ...
    @property
    def response_timeout(self) -> int: ...
    @property
    def number_of_retries(self) -> int: ...
    @property
    def exponent_base(self) -> int: ...
    @property
    def max_delay(self) -> int: ...
    @property
    def factor(self) -> int: ...
