use crate::orders::{OrderOutcome, OrderStatus};
use crate::Error;
#[derive(Debug, Default)]
pub(crate) struct FillTracker {
last: Option<OrderStatus>,
}
impl FillTracker {
pub(crate) fn observe(&mut self, status: OrderStatus) -> Option<OrderOutcome> {
let outcome = status.outcome();
if outcome.is_none() {
self.last = Some(status);
}
outcome
}
pub(crate) fn error(error: Error) -> Result<OrderOutcome, Error> {
match error {
Error::Notice(notice) => Ok(OrderOutcome::Rejected(notice)),
error => Err(error),
}
}
pub(crate) fn timed_out(self) -> OrderOutcome {
OrderOutcome::TimedOut(self.last)
}
}
#[cfg(test)]
#[path = "fill_tests.rs"]
mod tests;