use std::marker::ConstParamTy;
pub trait CapacitySpec {
type const STREAM: usize;
type const FLIGHT: usize;
type const WORKING: usize;
type const FILLED: usize;
}
pub struct CapacitySpecLowFrequencyTrades;
impl CapacitySpec for CapacitySpecLowFrequencyTrades {
type const STREAM: usize = 64;
type const FLIGHT: usize = 4;
type const WORKING: usize = 4;
type const FILLED: usize = 10_000;
}
pub struct CapacitySpecHighFrequencyTrades;
impl CapacitySpec for CapacitySpecHighFrequencyTrades {
type const STREAM: usize = 64;
type const FLIGHT: usize = 16;
type const WORKING: usize = 16;
type const FILLED: usize = 1_000_000;
}
#[derive(ConstParamTy, Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub struct LatencyDistribution {
pub min_ns: u32,
pub max_ns: u32,
pub mean_ns: u32,
pub std_dev_ns: u32,
}
pub trait PhysicalLocationLD {
type const LATENCY_DISTRIBUTION: LatencyDistribution;
}
pub struct PhysicalLocationLDPrimaryBareMetal;
impl PhysicalLocationLD for PhysicalLocationLDPrimaryBareMetal {
type const LATENCY_DISTRIBUTION: LatencyDistribution = LatencyDistribution {
min_ns: 2_000,
max_ns: 10_000,
mean_ns: 4_000,
std_dev_ns: 500,
};
}
pub struct PhysicalLocationLDProximityBareMetal;
impl PhysicalLocationLD for PhysicalLocationLDProximityBareMetal {
type const LATENCY_DISTRIBUTION: LatencyDistribution = LatencyDistribution {
min_ns: 300_000,
max_ns: 1_000_000,
mean_ns: 400_000,
std_dev_ns: 25_000,
};
}
pub trait OrderRouterLD {
type const LATENCY_DISTRIBUTION: LatencyDistribution;
}
pub struct OrderRouterLDILink;
impl OrderRouterLD for OrderRouterLDILink {
type const LATENCY_DISTRIBUTION: LatencyDistribution = LatencyDistribution {
min_ns: 500,
max_ns: 1_500,
mean_ns: 1_000,
std_dev_ns: 250,
};
}
pub struct OrderRouterLDRithmicDiamond;
impl OrderRouterLD for OrderRouterLDRithmicDiamond {
type const LATENCY_DISTRIBUTION: LatencyDistribution = LatencyDistribution {
min_ns: 10_000,
max_ns: 50_000,
mean_ns: 25_000,
std_dev_ns: 5_000,
};
}
pub struct OrderRounterLDRithmicFull;
impl OrderRouterLD for OrderRounterLDRithmicFull {
type const LATENCY_DISTRIBUTION: LatencyDistribution = LatencyDistribution {
min_ns: 500_000,
max_ns: 2_000_000,
mean_ns: 750_000,
std_dev_ns: 50_000,
};
}
pub trait ExchangeLD {
type const LATENCY_DISTRIBUTION: LatencyDistribution;
}
pub struct ExchangeLD_CME;
impl ExchangeLD for ExchangeLD_CME {
type const LATENCY_DISTRIBUTION: LatencyDistribution = LatencyDistribution {
min_ns: 10_000,
max_ns: 100_000,
mean_ns: 40_000,
std_dev_ns: 5_000,
};
}