from abc import ABCMeta, abstractmethod
from typing import Any

from graia.saya.cube import Cube


class Behaviour(metaclass=ABCMeta):
    @abstractmethod
    def allocate(self, cube: Cube[Any]) -> Any:
        pass

    @abstractmethod
    def release(self, cube: Cube[Any]) -> Any:
        pass
