#![allow(dead_code)]
use std::time::{SystemTime, UNIX_EPOCH};
use matchcore::*;
pub fn now() -> Timestamp {
let duration = SystemTime::now().duration_since(UNIX_EPOCH).unwrap();
Timestamp(duration.as_secs())
}
pub fn sequence_number() -> SequenceNumber {
static mut NEXT_SEQUENCE_NUMBER: SequenceNumber = SequenceNumber(0);
unsafe {
let sequence_number = NEXT_SEQUENCE_NUMBER;
NEXT_SEQUENCE_NUMBER = sequence_number.next();
sequence_number
}
}
pub fn target_order_id(outcome: &CommandOutcome) -> Option<OrderId> {
match outcome {
CommandOutcome::Applied(CommandReport::Submit(command_effects)) => {
Some(command_effects.target_order().order_id())
}
CommandOutcome::Applied(CommandReport::Amend(command_effects)) => {
Some(command_effects.target_order().order_id())
}
_ => None,
}
}
pub fn populate_book() -> OrderBook {
let mut book = OrderBook::new("ETH/USD");
for i in 0..10 {
book.execute(&Command {
meta: CommandMeta {
sequence_number: sequence_number(),
timestamp: now(),
},
kind: CommandKind::Submit(SubmitCmd {
order: NewOrder::Limit(LimitOrder::new(
Price(100 - i),
QuantityPolicy::Standard {
quantity: Quantity(100),
},
OrderFlags::new(Side::Buy, false, TimeInForce::Gtc),
)),
}),
});
}
for i in 0..10 {
book.execute(&Command {
meta: CommandMeta {
sequence_number: sequence_number(),
timestamp: now(),
},
kind: CommandKind::Submit(SubmitCmd {
order: NewOrder::Limit(LimitOrder::new(
Price(110 + i),
QuantityPolicy::Standard {
quantity: Quantity(100),
},
OrderFlags::new(Side::Sell, false, TimeInForce::Gtc),
)),
}),
});
}
book
}
fn main() {}