use serde::Deserialize;
use crate::account::history::PositionFunding;
use crate::account::holdings::BoPosition;
use crate::account::{Asset, PoolShare, Position};
use crate::markets::Trade;
use crate::utils::ids::whole;
use crate::utils::{AccountIndex, AssetId, Dec, Figure, MarketId};
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct Volumes {
pub daily: Figure,
pub weekly: Figure,
pub monthly: Figure,
pub total: Figure,
pub daily_trades: Option<u64>,
pub weekly_trades: Option<u64>,
pub monthly_trades: Option<u64>,
pub total_trades: Option<u64>,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct AccountAll {
pub account: AccountIndex,
pub assets: Vec<Asset>,
pub positions: Vec<Position>,
pub bo_positions: Vec<BoPosition>,
pub shares: Vec<PoolShare>,
pub trades: Vec<Trade>,
pub fundings: Vec<PositionFunding>,
pub volumes: Option<Volumes>,
pub transaction_time: u64,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct AccountAllPositions {
pub account: AccountIndex,
pub positions: Vec<Position>,
pub bo_positions: Vec<BoPosition>,
pub shares: Vec<PoolShare>,
pub last_funding_round: Vec<(MarketId, Dec)>,
pub last_funding_discount: Vec<(MarketId, Dec)>,
pub transaction_time: u64,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct AccountAllAssets {
pub account: AccountIndex,
pub assets: Vec<Asset>,
pub timestamp: u64,
pub transaction_time: u64,
}
#[derive(Debug, Clone, PartialEq, Eq, Deserialize)]
pub struct AvgEntryPrice {
pub asset_id: AssetId,
pub avg_entry_price: Dec,
pub asset_size: Dec,
#[serde(default, deserialize_with = "whole")]
pub last_trade_id: u64,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct AvgEntryPrices {
pub account: AccountIndex,
pub prices: Vec<AvgEntryPrice>,
pub timestamp: u64,
}