# Copyright (c) PARRRATE T&V 2021. All rights reserved. from bu4.encoding.codes import CODE_DLYD from bu4.evaluation.constructs.eattachable import EAttachable from bu4.evaluation.constructs.edelayed import EDelayed from bu4.evaluation.constructs.evaluable import Evaluable from bu4.indexing.constructs.indexed import Indexed from bu4.indexing.evaluation.eivtype import eivtype from bu4.transform.states.aftertransform import AfterTransform from bu4.transform.states.transformfinished import TransformFinished from bu4.transform.states.transformstart import TransformStart from bu4.transform.states.transformstate import TransformState from bu4.transform.targets.atlambda import ATLambda __all__ = ('IDelayed',) class IDelayed(Indexed): def __init__(self, value: Indexed): self.value = value def attach(self, ev: eivtype) -> Evaluable: return EDelayed(EAttachable( ev, self.value )) def __str__(self): return f'&{self.value}' def bytes(self) -> TransformState[bytes]: return AfterTransform( TransformStart(lambda: self.value.bytes()), ATLambda( lambda value: TransformFinished(bytes([CODE_DLYD, *value])) ) )