builtup4/bu4/evaluation/targets/avconvert.py

33 lines
932 B
Python

# Copyright (c) PARRRATE T&V 2021. All rights reserved.
from typing import Type, Generic, TypeVar
from bu4.evaluation.av.aftervalue import AfterValue
from bu4.evaluation.constructs.evaluable import Evaluable
from bu4.evaluation.constructs.evalue import EValue
from bu4.evaluation.targets.avtarget import AVTarget
__all__ = ('AVConvert',)
T = TypeVar('T')
class AVConvert(AVTarget, Generic[T]):
def __init__(self, target_type: Type[T]):
self.target_type = target_type
def iterate(self, value: EValue) -> Evaluable:
raise NotImplementedError
def given_typed(self, value: T) -> Evaluable:
raise NotImplementedError
def given(self, value: EValue) -> Evaluable:
if isinstance(value, self.target_type):
return self.given_typed(value)
else:
return AfterValue(self.iterate(value), self)
def __str__(self):
return f'<{self.target_type}>'