pub struct PositionManager { /* private fields */ }Expand description
Owns all positions and provides indexed access.
Implementations§
Source§impl PositionManager
impl PositionManager
pub fn new() -> Self
Sourcepub fn add(&mut self, position: Position)
pub fn add(&mut self, position: Position)
Insert a position. Overwrites if the id already exists.
Sourcepub fn add_checked(
&mut self,
position: Position,
) -> Result<(), PositionManagerError>
pub fn add_checked( &mut self, position: Position, ) -> Result<(), PositionManagerError>
Atomically insert a position after rejecting a duplicate non-empty trade ID.
Validation happens before any primary or secondary index mutation. The
legacy Self::add API remains available for callers that require its
historical last-write-wins behavior.
pub fn is_empty(&self) -> bool
Sourcepub fn iter(&self) -> impl Iterator<Item = (&PositionId, &Position)>
pub fn iter(&self) -> impl Iterator<Item = (&PositionId, &Position)>
Iterate over all positions.
Sourcepub fn iter_mut(&mut self) -> impl Iterator<Item = (&PositionId, &mut Position)>
pub fn iter_mut(&mut self) -> impl Iterator<Item = (&PositionId, &mut Position)>
Iterate mutably over all positions.
Sourcepub fn position_ids_sorted(&self) -> Vec<PositionId> ⓘ
pub fn position_ids_sorted(&self) -> Vec<PositionId> ⓘ
All position IDs in stable lexicographic order.
Sourcepub fn ids_by_symbol_status(
&self,
symbol: &str,
status: PositionStatus,
) -> Vec<PositionId> ⓘ
pub fn ids_by_symbol_status( &self, symbol: &str, status: PositionStatus, ) -> Vec<PositionId> ⓘ
Collect ids of positions matching the given status and symbol.
Sourcepub fn ids_by_symbol_status_sorted(
&self,
symbol: &str,
status: PositionStatus,
) -> Vec<PositionId> ⓘ
pub fn ids_by_symbol_status_sorted( &self, symbol: &str, status: PositionStatus, ) -> Vec<PositionId> ⓘ
Stable lexicographic variant of Self::ids_by_symbol_status.
Sourcepub fn ids_by_status(&self, status: PositionStatus) -> Vec<PositionId> ⓘ
pub fn ids_by_status(&self, status: PositionStatus) -> Vec<PositionId> ⓘ
Collect ids of all positions with the given status.
Sourcepub fn ids_by_status_sorted(&self, status: PositionStatus) -> Vec<PositionId> ⓘ
pub fn ids_by_status_sorted(&self, status: PositionStatus) -> Vec<PositionId> ⓘ
Stable lexicographic variant of Self::ids_by_status.
Sourcepub fn ids_by_symbol_side(&self, symbol: &str, side: Side) -> Vec<PositionId> ⓘ
pub fn ids_by_symbol_side(&self, symbol: &str, side: Side) -> Vec<PositionId> ⓘ
Collect ids of open positions on a given symbol with a given side.
Sourcepub fn ids_by_symbol_side_sorted(
&self,
symbol: &str,
side: Side,
) -> Vec<PositionId> ⓘ
pub fn ids_by_symbol_side_sorted( &self, symbol: &str, side: Side, ) -> Vec<PositionId> ⓘ
Stable lexicographic variant of Self::ids_by_symbol_side.
Sourcepub fn open_positions(&self) -> Vec<&Position>
pub fn open_positions(&self) -> Vec<&Position>
All open (active) positions.
Sourcepub fn pending_positions(&self) -> Vec<&Position>
pub fn pending_positions(&self) -> Vec<&Position>
All pending (unfilled) positions.
Sourcepub fn closed_positions(&self) -> Vec<&Position>
pub fn closed_positions(&self) -> Vec<&Position>
All closed positions.
Sourcepub fn open_ids_by_symbol(&self, symbol: &str) -> Vec<PositionId> ⓘ
pub fn open_ids_by_symbol(&self, symbol: &str) -> Vec<PositionId> ⓘ
Collect ids of all open positions on a given symbol.
Sourcepub fn open_ids_by_symbol_sorted(&self, symbol: &str) -> Vec<PositionId> ⓘ
pub fn open_ids_by_symbol_sorted(&self, symbol: &str) -> Vec<PositionId> ⓘ
Stable lexicographic variant of Self::open_ids_by_symbol.
Sourcepub fn pending_ids_by_symbol(&self, symbol: &str) -> Vec<PositionId> ⓘ
pub fn pending_ids_by_symbol(&self, symbol: &str) -> Vec<PositionId> ⓘ
Collect ids of all pending positions on a given symbol.
Sourcepub fn pending_ids_by_symbol_sorted(&self, symbol: &str) -> Vec<PositionId> ⓘ
pub fn pending_ids_by_symbol_sorted(&self, symbol: &str) -> Vec<PositionId> ⓘ
Stable lexicographic variant of Self::pending_ids_by_symbol.
Sourcepub fn ids_for_symbol(&self, symbol: &str) -> Vec<PositionId> ⓘ
pub fn ids_for_symbol(&self, symbol: &str) -> Vec<PositionId> ⓘ
All position IDs for a symbol (any status), via the symbol index.
Sourcepub fn ids_for_symbol_sorted(&self, symbol: &str) -> Vec<PositionId> ⓘ
pub fn ids_for_symbol_sorted(&self, symbol: &str) -> Vec<PositionId> ⓘ
Stable lexicographic variant of Self::ids_for_symbol.
Sourcepub fn add_group(&mut self, group: PositionGroup)
pub fn add_group(&mut self, group: PositionGroup)
Create or update a position group.
Sourcepub fn get_group(&self, id: &str) -> Option<&PositionGroup>
pub fn get_group(&self, id: &str) -> Option<&PositionGroup>
Get a group by id.
Sourcepub fn add_to_group(&mut self, group_id: &str, position_id: PositionId)
pub fn add_to_group(&mut self, group_id: &str, position_id: PositionId)
Add a position to an existing group. Creates the group if it does not exist.
Sourcepub fn group_position_ids(&self, group_id: &str) -> Vec<PositionId> ⓘ
pub fn group_position_ids(&self, group_id: &str) -> Vec<PositionId> ⓘ
Return all position ids belonging to a group.
Sourcepub fn remove_group(&mut self, group_id: &str) -> Option<PositionGroup>
pub fn remove_group(&mut self, group_id: &str) -> Option<PositionGroup>
Remove a group (does not close or remove the positions).
Sourcepub fn open_ids_by_group(&self, group_id: &str) -> Vec<PositionId> ⓘ
pub fn open_ids_by_group(&self, group_id: &str) -> Vec<PositionId> ⓘ
All open position IDs in a group.
Sourcepub fn pending_ids_by_group(&self, group_id: &str) -> Vec<PositionId> ⓘ
pub fn pending_ids_by_group(&self, group_id: &str) -> Vec<PositionId> ⓘ
All pending position IDs in a group.
Sourcepub fn all_group_ids(&self) -> Vec<&GroupId> ⓘ
pub fn all_group_ids(&self) -> Vec<&GroupId> ⓘ
All group IDs that currently exist.
Sourcepub fn all_group_ids_sorted(&self) -> Vec<&GroupId> ⓘ
pub fn all_group_ids_sorted(&self) -> Vec<&GroupId> ⓘ
All group IDs in stable lexicographic order.
Sourcepub fn id_by_trade_id(&self, trade_id: &str) -> Option<PositionId>
pub fn id_by_trade_id(&self, trade_id: &str) -> Option<PositionId>
Look up the position ID for a given application-defined trade id.
Sourcepub fn would_duplicate_trade_id(
&self,
position: &Position,
) -> Option<PositionId>
pub fn would_duplicate_trade_id( &self, position: &Position, ) -> Option<PositionId>
Return the current owner when adding position would duplicate a trade
ID already assigned to a different position.
This is opt-in validation; Self::add intentionally retains its
legacy last-write-wins trade-index behavior.
Sourcepub fn ensure_trade_id_available(
&self,
trade_id: &str,
position_id: Option<&str>,
) -> Result<(), PositionManagerError>
pub fn ensure_trade_id_available( &self, trade_id: &str, position_id: Option<&str>, ) -> Result<(), PositionManagerError>
Validate a non-empty trade ID without mutating manager state.
Sourcepub fn duplicate_trade_ids(&self) -> Vec<TradeId> ⓘ
pub fn duplicate_trade_ids(&self) -> Vec<TradeId> ⓘ
Find every trade ID currently present on more than one stored position. Results are stable and lexicographically sorted.
Sourcepub fn set_trade_id(&mut self, position_id: &str, trade_id: TradeId)
pub fn set_trade_id(&mut self, position_id: &str, trade_id: TradeId)
Update the trade_id mapping for a position (used when trade_id is attached after position creation, e.g. during scale-in).
Sourcepub fn set_trade_id_checked(
&mut self,
position_id: &str,
trade_id: TradeId,
) -> Result<(), PositionManagerError>
pub fn set_trade_id_checked( &mut self, position_id: &str, trade_id: TradeId, ) -> Result<(), PositionManagerError>
Atomically attach a trade ID to a stored position and update the index.
Sourcepub fn open_ids_by_side(&self, side: Side) -> Vec<PositionId> ⓘ
pub fn open_ids_by_side(&self, side: Side) -> Vec<PositionId> ⓘ
Collect ids of all open positions matching a side filter.
Sourcepub fn open_ids_by_side_sorted(&self, side: Side) -> Vec<PositionId> ⓘ
pub fn open_ids_by_side_sorted(&self, side: Side) -> Vec<PositionId> ⓘ
Stable lexicographic variant of Self::open_ids_by_side.
Sourcepub fn all_open_ids(&self) -> Vec<PositionId> ⓘ
pub fn all_open_ids(&self) -> Vec<PositionId> ⓘ
Collect ids of all open positions regardless of symbol.
Sourcepub fn all_open_ids_sorted(&self) -> Vec<PositionId> ⓘ
pub fn all_open_ids_sorted(&self) -> Vec<PositionId> ⓘ
All open position IDs in stable lexicographic order.
Sourcepub fn all_pending_ids(&self) -> Vec<PositionId> ⓘ
pub fn all_pending_ids(&self) -> Vec<PositionId> ⓘ
Collect ids of all pending positions regardless of symbol.
Sourcepub fn all_pending_ids_sorted(&self) -> Vec<PositionId> ⓘ
pub fn all_pending_ids_sorted(&self) -> Vec<PositionId> ⓘ
All pending position IDs in stable lexicographic order.
Trait Implementations§
Source§impl Clone for PositionManager
impl Clone for PositionManager
Source§fn clone(&self) -> PositionManager
fn clone(&self) -> PositionManager
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more