实现类型化订单有效期合同
This commit is contained in:
@@ -72,6 +72,7 @@ pub enum OrderStatus {
|
||||
PartiallyFilled,
|
||||
Canceled,
|
||||
Rejected,
|
||||
Expired,
|
||||
}
|
||||
|
||||
impl OrderStatus {
|
||||
@@ -82,6 +83,7 @@ impl OrderStatus {
|
||||
Self::PartiallyFilled => "partially_filled",
|
||||
Self::Canceled => "canceled",
|
||||
Self::Rejected => "rejected",
|
||||
Self::Expired => "expired",
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -128,6 +130,7 @@ impl OrderEvent {
|
||||
}
|
||||
OrderStatus::Canceled => self.filled_quantity < self.requested_quantity,
|
||||
OrderStatus::Rejected => self.filled_quantity == 0,
|
||||
OrderStatus::Expired => self.filled_quantity < self.requested_quantity,
|
||||
};
|
||||
if !quantity_valid {
|
||||
return Err(format!(
|
||||
@@ -327,10 +330,16 @@ mod tests {
|
||||
assert!(order_event(OrderStatus::Filled, 100).validate().is_ok());
|
||||
assert!(order_event(OrderStatus::Canceled, 40).validate().is_ok());
|
||||
assert!(order_event(OrderStatus::Rejected, 0).validate().is_ok());
|
||||
assert!(order_event(OrderStatus::Expired, 40).validate().is_ok());
|
||||
|
||||
assert!(order_event(OrderStatus::PartiallyFilled, 0).validate().is_err());
|
||||
assert!(
|
||||
order_event(OrderStatus::PartiallyFilled, 0)
|
||||
.validate()
|
||||
.is_err()
|
||||
);
|
||||
assert!(order_event(OrderStatus::Filled, 99).validate().is_err());
|
||||
assert!(order_event(OrderStatus::Canceled, 100).validate().is_err());
|
||||
assert!(order_event(OrderStatus::Rejected, 1).validate().is_err());
|
||||
assert!(order_event(OrderStatus::Expired, 100).validate().is_err());
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user