#[derive(Debug, Clone, Copy, PartialEq)]
pub enum OrderKind {
Market,
Limit {
price: f64,
},
StopMarket {
trigger: f64,
},
}
impl OrderKind {
pub fn price(&self) -> Option<f64> {
match self {
OrderKind::Market => None,
OrderKind::Limit { price } => Some(*price),
OrderKind::StopMarket { trigger } => Some(*trigger),
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn market_has_no_price() {
assert_eq!(OrderKind::Market.price(), None);
}
#[test]
fn limit_returns_attached_price() {
assert_eq!(OrderKind::Limit { price: 123.45 }.price(), Some(123.45));
}
#[test]
fn stop_market_returns_trigger() {
assert_eq!(OrderKind::StopMarket { trigger: 99.5 }.price(), Some(99.5));
}
}