"""AutoNode - module for decorating code to populate it into OmniGraph nodes.

Allows generating nodes by decorating free functions, classes and modules by adding `@AutoFunc()` or `@AutoClass()` to
the declaration of the class.

Generating code relies on function signatures provided by python's type annotations, therefore the module only supports
native python types with `__annotations__`. CPython classes need need to be wrapped for now.
"""
from ._impl.autonode.autonode import (
    AutoClass,
    AutoFunc,
    register_autonode_type_extension,
    unregister_autonode_type_extension,
)
from ._impl.autonode.event import IEventStream
from ._impl.autonode.type_definitions import (
    AutoNodeDefinitionGenerator,
    AutoNodeDefinitionWrapper,
    AutoNodeTypeConversion,
)

__all__ = [
    "AutoClass",
    "AutoFunc",
    "AutoNodeDefinitionGenerator",
    "AutoNodeDefinitionWrapper",
    "AutoNodeTypeConversion",
    "IEventStream",
    "register_autonode_type_extension",
    "unregister_autonode_type_extension",
]
