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

from typing import TypeVar

from bu4.parsing.abstractparser import AbstractParser
from bu4.transform.states.transformstate import TransformState

__all__ = ('ParsingRead',)

T = TypeVar('T')


class ParsingRead(TransformState[T]):
    def __init__(self, parser: AbstractParser[T]):
        self.parser = parser

    def next(self) -> TransformState[T]:
        code = self.parser.read()
        extension = self.parser.extension_for(code)
        return extension.apply()