use crate::param::PositionSize;
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
#[non_exhaustive]
pub enum AdjustmentAmount {
Delta(PositionSize),
Absolute(PositionSize),
}
impl std::fmt::Display for AdjustmentAmount {
fn fmt(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
Self::Delta(delta) => write!(formatter, "delta: {delta}"),
Self::Absolute(sz) => write!(formatter, "sz: {sz}"),
}
}
}
#[cfg(test)]
mod tests {
use super::AdjustmentAmount;
use crate::param::PositionSize;
#[test]
fn delta_holds_signed_difference() {
let value = PositionSize::from_str("-3.5").expect("must be valid");
assert_eq!(
AdjustmentAmount::Delta(value),
AdjustmentAmount::Delta(value)
);
}
#[test]
fn absolute_holds_resulting_value() {
let value = PositionSize::from_str("12").expect("must be valid");
assert_eq!(
AdjustmentAmount::Absolute(value),
AdjustmentAmount::Absolute(value)
);
}
#[test]
fn display_delta_variant() {
let value = PositionSize::from_str("-3.5").expect("must be valid");
assert_eq!(AdjustmentAmount::Delta(value).to_string(), "delta: -3.5");
}
#[test]
fn display_absolute_variant() {
let value = PositionSize::from_str("12").expect("must be valid");
assert_eq!(AdjustmentAmount::Absolute(value).to_string(), "sz: 12");
}
}