Files
tycho-execution/src/encoding/strategy_selector.rs
Diana Carvalho 6e67875821 feat: Add StrategySelector
This way the user could be able to extend this easily
2025-01-16 17:17:52 +00:00

24 lines
754 B
Rust

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 {})
}
}
}