
# EXPERIMENTAL - DO NOT USE !!!
# See `experimental_unify_thrift_python_type_hints` documentation in thrift compiler

#
# Autogenerated by Thrift
#
# DO NOT EDIT
#  @generated
#

from __future__ import annotations

import abc as _abc
import typing as _typing
import enum as _enum


import folly.iobuf as _fbthrift_iobuf

class MyEnum:
    pass

class HackEnum:
    pass


class MyStruct(_abc.ABC):
    @property
    @_abc.abstractmethod
    def MyIntField(self) -> int: ...
    @property
    @_abc.abstractmethod
    def MyStringField(self) -> str: ...
    @property
    @_abc.abstractmethod
    def MyDataField(self) -> MyDataItem: ...
    @property
    @_abc.abstractmethod
    def myEnum(self) -> MyEnum: ...
    @property
    @_abc.abstractmethod
    def oneway(self) -> bool: ...
    @property
    @_abc.abstractmethod
    def readonly(self) -> bool: ...
    @property
    @_abc.abstractmethod
    def idempotent(self) -> bool: ...
    @property
    @_abc.abstractmethod
    def floatSet(self) -> _typing.AbstractSet[float]: ...
    @property
    @_abc.abstractmethod
    def no_hack_codegen_field(self) -> str: ...
    @_abc.abstractmethod
    def __iter__(self) -> _typing.Iterator[_typing.Tuple[str, _typing.Union[int, str, MyDataItem, MyEnum, bool, bool, bool, _typing.AbstractSet[float], str]]]: ...
    @_abc.abstractmethod
    def _to_mutable_python(self) -> "test.fixtures.basic.module.thrift_mutable_types.MyStruct": ...  # type: ignore
    @_abc.abstractmethod
    def _to_python(self) -> "test.fixtures.basic.module.thrift_types.MyStruct": ...  # type: ignore
    @_abc.abstractmethod
    def _to_py3(self) -> "test.fixtures.basic.module.types.MyStruct": ...  # type: ignore
    @_abc.abstractmethod
    def _to_py_deprecated(self) -> "module.ttypes.MyStruct": ...  # type: ignore

class Containers(_abc.ABC):
    @property
    @_abc.abstractmethod
    def I32List(self) -> _typing.Sequence[int]: ...
    @property
    @_abc.abstractmethod
    def StringSet(self) -> _typing.AbstractSet[str]: ...
    @property
    @_abc.abstractmethod
    def StringToI64Map(self) -> _typing.Mapping[str, int]: ...
    @_abc.abstractmethod
    def __iter__(self) -> _typing.Iterator[_typing.Tuple[str, _typing.Union[_typing.Sequence[int], _typing.AbstractSet[str], _typing.Mapping[str, int]]]]: ...
    @_abc.abstractmethod
    def _to_mutable_python(self) -> "test.fixtures.basic.module.thrift_mutable_types.Containers": ...  # type: ignore
    @_abc.abstractmethod
    def _to_python(self) -> "test.fixtures.basic.module.thrift_types.Containers": ...  # type: ignore
    @_abc.abstractmethod
    def _to_py3(self) -> "test.fixtures.basic.module.types.Containers": ...  # type: ignore
    @_abc.abstractmethod
    def _to_py_deprecated(self) -> "module.ttypes.Containers": ...  # type: ignore

class MyDataItem(_abc.ABC):
    pass
    @_abc.abstractmethod
    def __iter__(self) -> _typing.Iterator[_typing.Tuple[str, _typing.Union[None]]]: ...
    @_abc.abstractmethod
    def _to_mutable_python(self) -> "test.fixtures.basic.module.thrift_mutable_types.MyDataItem": ...  # type: ignore
    @_abc.abstractmethod
    def _to_python(self) -> "test.fixtures.basic.module.thrift_types.MyDataItem": ...  # type: ignore
    @_abc.abstractmethod
    def _to_py3(self) -> "test.fixtures.basic.module.types.MyDataItem": ...  # type: ignore
    @_abc.abstractmethod
    def _to_py_deprecated(self) -> "module.ttypes.MyDataItem": ...  # type: ignore

class MyUnion(_abc.ABC):
    @property
    @_abc.abstractmethod
    def myEnum(self) -> MyEnum: ...
    @property
    @_abc.abstractmethod
    def myStruct(self) -> MyStruct: ...
    @property
    @_abc.abstractmethod
    def myDataItem(self) -> MyDataItem: ...
    @property
    @_abc.abstractmethod
    def floatSet(self) -> _typing.AbstractSet[float]: ...
    @_abc.abstractmethod
    def _to_mutable_python(self) -> "test.fixtures.basic.module.thrift_mutable_types.MyUnion": ...  # type: ignore
    @_abc.abstractmethod
    def _to_python(self) -> "test.fixtures.basic.module.thrift_types.MyUnion": ...  # type: ignore
    @_abc.abstractmethod
    def _to_py3(self) -> "test.fixtures.basic.module.types.MyUnion": ...  # type: ignore
    @_abc.abstractmethod
    def _to_py_deprecated(self) -> "module.ttypes.MyUnion": ...  # type: ignore

    class FbThriftUnionFieldEnum(_enum.Enum):
        EMPTY: MyUnion.FbThriftUnionFieldEnum = 0
        myEnum: MyUnion.FbThriftUnionFieldEnum = 1
        myStruct: MyUnion.FbThriftUnionFieldEnum = 2
        myDataItem: MyUnion.FbThriftUnionFieldEnum = 3
        floatSet: MyUnion.FbThriftUnionFieldEnum = 4

    FbThriftUnionFieldEnum.__name__ = "MyUnion"

    fbthrift_current_value: _typing.Final[_typing.Union[None, MyEnum, MyStruct, MyDataItem, _typing.AbstractSet[float]]]
    fbthrift_current_field: _typing.Final[FbThriftUnionFieldEnum]


class MyException(_abc.ABC):
    @property
    @_abc.abstractmethod
    def MyIntField(self) -> int: ...
    @property
    @_abc.abstractmethod
    def MyStringField(self) -> str: ...
    @property
    @_abc.abstractmethod
    def myStruct(self) -> MyStruct: ...
    @property
    @_abc.abstractmethod
    def myUnion(self) -> MyUnion: ...
    @_abc.abstractmethod
    def __iter__(self) -> _typing.Iterator[_typing.Tuple[str, _typing.Union[int, str, MyStruct, MyUnion]]]: ...
    @_abc.abstractmethod
    def _to_mutable_python(self) -> "test.fixtures.basic.module.thrift_mutable_types.MyException": ...  # type: ignore
    @_abc.abstractmethod
    def _to_python(self) -> "test.fixtures.basic.module.thrift_types.MyException": ...  # type: ignore
    @_abc.abstractmethod
    def _to_py3(self) -> "test.fixtures.basic.module.types.MyException": ...  # type: ignore
    @_abc.abstractmethod
    def _to_py_deprecated(self) -> "module.ttypes.MyException": ...  # type: ignore

class MyExceptionWithMessage(_abc.ABC):
    @property
    @_abc.abstractmethod
    def MyIntField(self) -> int: ...
    @property
    @_abc.abstractmethod
    def MyStringField(self) -> str: ...
    @property
    @_abc.abstractmethod
    def myStruct(self) -> MyStruct: ...
    @property
    @_abc.abstractmethod
    def myUnion(self) -> MyUnion: ...
    @_abc.abstractmethod
    def __iter__(self) -> _typing.Iterator[_typing.Tuple[str, _typing.Union[int, str, MyStruct, MyUnion]]]: ...
    @_abc.abstractmethod
    def _to_mutable_python(self) -> "test.fixtures.basic.module.thrift_mutable_types.MyExceptionWithMessage": ...  # type: ignore
    @_abc.abstractmethod
    def _to_python(self) -> "test.fixtures.basic.module.thrift_types.MyExceptionWithMessage": ...  # type: ignore
    @_abc.abstractmethod
    def _to_py3(self) -> "test.fixtures.basic.module.types.MyExceptionWithMessage": ...  # type: ignore
    @_abc.abstractmethod
    def _to_py_deprecated(self) -> "module.ttypes.MyExceptionWithMessage": ...  # type: ignore

class ReservedKeyword(_abc.ABC):
    @property
    @_abc.abstractmethod
    def reserved_field(self) -> int: ...
    @_abc.abstractmethod
    def __iter__(self) -> _typing.Iterator[_typing.Tuple[str, _typing.Union[int]]]: ...
    @_abc.abstractmethod
    def _to_mutable_python(self) -> "test.fixtures.basic.module.thrift_mutable_types.ReservedKeyword": ...  # type: ignore
    @_abc.abstractmethod
    def _to_python(self) -> "test.fixtures.basic.module.thrift_types.ReservedKeyword": ...  # type: ignore
    @_abc.abstractmethod
    def _to_py3(self) -> "test.fixtures.basic.module.types.ReservedKeyword": ...  # type: ignore
    @_abc.abstractmethod
    def _to_py_deprecated(self) -> "module.ttypes.ReservedKeyword": ...  # type: ignore

class UnionToBeRenamed(_abc.ABC):
    @property
    @_abc.abstractmethod
    def reserved_field(self) -> int: ...
    @_abc.abstractmethod
    def _to_mutable_python(self) -> "test.fixtures.basic.module.thrift_mutable_types.UnionToBeRenamed": ...  # type: ignore
    @_abc.abstractmethod
    def _to_python(self) -> "test.fixtures.basic.module.thrift_types.UnionToBeRenamed": ...  # type: ignore
    @_abc.abstractmethod
    def _to_py3(self) -> "test.fixtures.basic.module.types.UnionToBeRenamed": ...  # type: ignore
    @_abc.abstractmethod
    def _to_py_deprecated(self) -> "module.ttypes.UnionToBeRenamed": ...  # type: ignore

    class FbThriftUnionFieldEnum(_enum.Enum):
        EMPTY: UnionToBeRenamed.FbThriftUnionFieldEnum = 0
        reserved_field: UnionToBeRenamed.FbThriftUnionFieldEnum = 1

    FbThriftUnionFieldEnum.__name__ = "UnionToBeRenamed"

    fbthrift_current_value: _typing.Final[_typing.Union[None, int]]
    fbthrift_current_field: _typing.Final[FbThriftUnionFieldEnum]


MyEnumAlias = MyEnum
MyDataItemAlias = MyDataItem
