33 lines
932 B
Python
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}>'
|