use crate::core::PolicyGroupId;
use crate::param::{Asset, Pnl, PositionSize, Price};
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub struct OutcomeAmount {
pub delta: PositionSize,
pub absolute: PositionSize,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub struct PnlOutcomeAmount {
pub delta: Pnl,
pub absolute: Pnl,
}
#[derive(Clone, Debug, PartialEq, Eq)]
pub struct AccountOutcomeEntry {
pub asset: Asset,
pub balance: Option<OutcomeAmount>,
pub held: Option<OutcomeAmount>,
pub incoming: Option<OutcomeAmount>,
pub realized_pnl: Option<PnlOutcomeAmount>,
pub average_entry_price: Option<Price>,
}
#[derive(Clone, Debug, PartialEq, Eq)]
pub struct AccountAdjustmentOutcome {
pub policy_group_id: PolicyGroupId,
pub entry: AccountOutcomeEntry,
}
#[derive(Clone, Debug, Default, PartialEq, Eq)]
pub struct AccountAdjustmentBatchResult {
pub outcomes: Vec<AccountAdjustmentOutcome>,
}
impl IntoIterator for AccountAdjustmentBatchResult {
type Item = AccountAdjustmentOutcome;
type IntoIter = std::vec::IntoIter<AccountAdjustmentOutcome>;
fn into_iter(self) -> Self::IntoIter {
self.outcomes.into_iter()
}
}
impl<'a> IntoIterator for &'a AccountAdjustmentBatchResult {
type Item = &'a AccountAdjustmentOutcome;
type IntoIter = std::slice::Iter<'a, AccountAdjustmentOutcome>;
fn into_iter(self) -> Self::IntoIter {
self.outcomes.iter()
}
}