Source code for returns.interfaces.unwrappable

from abc import abstractmethod
from typing import Generic, TypeVar

_FirstType = TypeVar('_FirstType')
_SecondType = TypeVar('_SecondType')

_UnwrappableType = TypeVar('_UnwrappableType', bound='Unwrappable')


[docs]class Unwrappable(Generic[_FirstType, _SecondType]): """ Represents containers that can unwrap and return its wrapped value. There are no aliases or ``UnwrappableN`` for ``Unwrappable`` interface. Because it always uses two and just two types. Not all types can be ``Unwrappable`` because we do require to raise ``UnwrapFailedError`` if unwrap is not possible. """
[docs] @abstractmethod def unwrap(self: _UnwrappableType) -> _FirstType: """ Custom magic method to unwrap inner value from container. Should be redefined for ones that actually have values. And for ones that raise an exception for no values. .. note:: As a part of the contract, failed ``unwrap`` calls must raise :class:`returns.primitives.excetion.UnwrapFailedError` exception. This method is the opposite of :meth:`~Unwrapable.failure`. """
[docs] @abstractmethod def failure(self: _UnwrappableType) -> _SecondType: """ Custom magic method to unwrap inner value from the failed container. .. note:: As a part of the contract, failed ``failure`` calls must raise :class:`returns.primitives.excetion.UnwrapFailedError` exception. This method is the opposite of :meth:`~Unwrapable.unwrap`. """