feat: Add StrategySelector
This way the user could be able to extend this easily
This commit is contained in:
23
src/encoding/strategy_selector.rs
Normal file
23
src/encoding/strategy_selector.rs
Normal file
@@ -0,0 +1,23 @@
|
||||
use crate::encoding::models::Order;
|
||||
use crate::encoding::strategy_encoder::{
|
||||
SequentialExactInStrategyEncoder, SingleSwapStrategyEncoder, SlipSwapStrategyEncoder,
|
||||
StrategyEncoder,
|
||||
};
|
||||
|
||||
pub trait StrategySelector {
|
||||
fn select_strategy(&self, order: &Order) -> Box<dyn StrategyEncoder>;
|
||||
}
|
||||
|
||||
pub struct DefaultStrategySelector;
|
||||
|
||||
impl StrategySelector for DefaultStrategySelector {
|
||||
fn select_strategy(&self, order: &Order) -> Box<dyn StrategyEncoder> {
|
||||
if order.swaps.len() == 1 {
|
||||
Box::new(SingleSwapStrategyEncoder {})
|
||||
} else if order.swaps.iter().all(|s| s.split == 0.0) {
|
||||
Box::new(SequentialExactInStrategyEncoder {})
|
||||
} else {
|
||||
Box::new(SlipSwapStrategyEncoder {})
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user