pub trait IOutBox<E: Executor> {
// Required methods
fn new(aggregate_id: String, topic: String, state: String) -> Self;
fn add<'async_trait>(
executor: Arc<RwLock<E>>,
outboxes: Vec<OutBox>
) -> Pin<Box<dyn Future<Output = Result<(), BaseError>> + Send + 'async_trait>>;
fn get<'async_trait>(
executor: Arc<RwLock<E>>
) -> Pin<Box<dyn Future<Output = Result<Vec<OutBox>, BaseError>> + Send + 'async_trait>>;
fn update<'life0, 'async_trait>(
&'life0 self,
executor: Arc<RwLock<E>>
) -> Pin<Box<dyn Future<Output = Result<(), BaseError>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait;
}