from pathlib import Path
from typing import Any, Iterable, Iterator, Optional, Union, overload

def get_string_id(key: Union[str, int]) -> int: ...

class StringStore:
    def __init__(
        self, strings: Optional[Iterable[str]] = ..., freeze: bool = ...
    ) -> None: ...
    @overload
    def __getitem__(self, string_or_id: Union[bytes, str]) -> int: ...
    @overload
    def __getitem__(self, string_or_id: int) -> str: ...
    def as_int(self, key: Union[bytes, str, int]) -> int: ...
    def as_string(self, key: Union[bytes, str, int]) -> str: ...
    def add(self, string: str) -> int: ...
    def __len__(self) -> int: ...
    def __contains__(self, string: str) -> bool: ...
    def __iter__(self) -> Iterator[str]: ...
    def __reduce__(self) -> Any: ...
    def to_disk(self, path: Union[str, Path]) -> None: ...
    def from_disk(self, path: Union[str, Path]) -> StringStore: ...
    def to_bytes(self, **kwargs: Any) -> bytes: ...
    def from_bytes(self, bytes_data: bytes, **kwargs: Any) -> StringStore: ...
    def _reset_and_load(self, strings: Iterable[str]) -> None: ...