use crate::core::{AccountGroups, AccountGroupsHandle, GroupLookup};
use crate::param::{AccountGroupId, AccountId};
use crate::storage::{self, StorageBuilder};
pub struct PostTradeContext<StorageFactory>
where
StorageFactory: storage::LockingPolicyFactory + storage::CreateStorageFor<AccountId> + 'static,
{
group_lookup: GroupLookup<StorageFactory>,
}
impl<StorageFactory> PostTradeContext<StorageFactory>
where
StorageFactory: storage::LockingPolicyFactory + storage::CreateStorageFor<AccountId> + 'static,
{
pub(crate) fn with_groups(
account_groups: AccountGroupsHandle<StorageFactory>,
account: Option<AccountId>,
) -> Self {
Self {
group_lookup: GroupLookup::new(account_groups, account),
}
}
pub fn new() -> Self
where
StorageFactory: Default,
{
let builder = StorageBuilder::new(StorageFactory::default());
let handle = AccountGroupsHandle::from_inner(StorageFactory::new_shared(
AccountGroups::new(&builder),
));
Self::with_groups(handle, None)
}
pub fn account_group(&self) -> Option<AccountGroupId> {
self.group_lookup.group()
}
}
impl<StorageFactory> Default for PostTradeContext<StorageFactory>
where
StorageFactory:
storage::LockingPolicyFactory + storage::CreateStorageFor<AccountId> + Default + 'static,
{
fn default() -> Self {
Self::new()
}
}