#  Copyright (c) PARRRATE T&V 2021. All rights reserved.

from typing import TypeVar

from bu4.transform.states.transformfinished import TransformFinished
from bu4.transform.states.transformstate import TransformState

__all__ = ('transform',)

T = TypeVar('T')


def transform(state: TransformState[T]) -> T:
    while True:
        if isinstance(state, TransformFinished):
            return state.transformed
        state = state.next()