rainbowadn/rainbowadn/core/extendableresolver.py
2022-07-10 21:14:02 +03:00

25 lines
845 B
Python

import abc
from typing import TypeVar
from .hashpoint import *
from .hashresolver import *
from .mentionable import *
from .resolvermetaorigin import *
__all__ = ('ExtendableResolver',)
Mentioned = TypeVar('Mentioned')
class ExtendableResolver(HashResolver, abc.ABC):
async def extend(self, hash_point: HashPoint[Mentioned]) -> 'ExtendableResolver':
raise NotImplementedError
async def migrate(self, hash_point: HashPoint[Mentioned]) -> HashPoint[Mentioned]:
assert isinstance(hash_point, HashPoint)
return ResolverMetaOrigin(await self.extend(hash_point)).hash_point(hash_point.factory, hash_point.point)
async def migrate_resolved(self, mentioned: Mentioned) -> Mentioned:
assert isinstance(mentioned, Mentionable)
return await (await self.migrate(HashPoint.of(mentioned))).resolve()