| 
						
						
						
					 | 
				
				 | 
				
					@ -1,9 +1,11 @@ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					use crate::async_utils::sleep;
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					use crate::loggers::Logger;
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					use crate::symbols::Symbol;
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					use async_trait::async_trait;
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					use std::error::Error;
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					use std::fmt;
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					use std::fmt::Debug;
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					use std::time::Duration;
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					#[async_trait(?Send)]
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					pub trait SymbolRunner {
 | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -96,6 +98,41 @@ impl SymbolRunner for InitializingSymbolRunner { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  }
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					}
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					#[derive(Clone, Debug)]
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					pub struct DelayingSymbolRunner<R>(R);
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					impl<R> DelayingSymbolRunner<R> {
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  pub fn new(symbol_runner: R) -> Self {
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    Self(symbol_runner)
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  }
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					}
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					#[async_trait(?Send)]
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					impl<R> SymbolRunner for DelayingSymbolRunner<R>
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					where
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  R: SymbolRunner,
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					{
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  async fn run_symbol<S: Symbol + Debug, L: Logger>(
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    &self,
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    symbol: &S,
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    logger: &L,
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    force: bool,
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  ) -> Result<bool, Box<dyn Error>> {
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    sleep(Duration::from_millis(
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      (((std::time::SystemTime::now()
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        .duration_since(std::time::UNIX_EPOCH)
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        .unwrap()
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        .subsec_micros()
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        % 20) as f32
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        / 2.0)
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        .exp()
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        / 8.0) as u64,
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    ))
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    .await;
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    self.0.run_symbol(symbol, logger, force).await
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  }
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					}
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					#[derive(Clone, Debug, Default)]
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					pub struct DrySymbolRunner;
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
						
					 | 
				
				 | 
				
					
  |