from abc import ABC, abstractmethod
from pydantic import BaseModel
from .states import State, Shared

class Node[T: State = State, S: Shared = Shared](BaseModel, ABC):
    
    @abstractmethod
    async def run(self, state: T, shared: S) -> None:
        pass