from typing import Dict, List
from dataclasses import dataclass
from lbcore.orders import Order, Match
@dataclass
class SideEffect:
order_id: str = ''
action: Dict = None
updates: Dict = None
matches: List[Match] = None
order: Order = None
action_exists: bool = False
def match(self, price):
match = self.action.copy()
match['price'] = price
return match
class SideEffects(list):
def add_action(self, order, action_exists=False, **action):
action['order_id'] = order.id
se = SideEffect(order=order, action=action,
action_exists=action_exists)
self.append(se)
return se
def add_update(self, order_id, **updates):
se = SideEffect(order_id=order_id, updates=updates)
self.append(se)
return se
def add_trade(self, order, matches):
se = SideEffect(order=order, matches=matches)
self.append(se)
return se