| use crate::models::MarketData; |
|
|
| |
| pub struct DataValidator { |
| } |
|
|
| impl DataValidator { |
| pub fn new() -> Self { |
| DataValidator {} |
| } |
| |
| |
| pub fn validate_time(&self, time_sec: u32) -> bool { |
| |
| let hour = time_sec / 10000; |
| let minute = (time_sec / 100) % 100; |
| let _second = time_sec % 100; |
| |
| |
| if hour == 9 && minute >= 15 { |
| return true; |
| } |
| if hour == 10 { |
| return true; |
| } |
| if hour == 11 && minute <= 30 { |
| return true; |
| } |
| |
| |
| if hour == 13 { |
| return true; |
| } |
| if hour == 14 { |
| return true; |
| } |
| if hour == 15 && minute == 0 { |
| return true; |
| } |
| |
| false |
| } |
| |
| |
| |
| pub fn validate(&self, data: &MarketData) -> bool { |
| |
| if !self.validate_time(data.time_sec) { |
| return false; |
| } |
| true |
| } |
| } |
|
|
| |
| pub fn filter_valid_data(data: Vec<MarketData>, validator: &DataValidator) -> Vec<MarketData> { |
| data.into_iter() |
| .filter(|d| validator.validate(d)) |
| .collect() |
| } |
|
|
| #[cfg(test)] |
| mod tests { |
| use super::*; |
| |
| #[test] |
| fn test_validate_time() { |
| let validator = DataValidator::new(); |
| |
| |
| assert!(validator.validate_time(91500)); |
| assert!(validator.validate_time(113000)); |
| assert!(!validator.validate_time(91400)); |
| assert!(!validator.validate_time(113100)); |
| |
| |
| assert!(validator.validate_time(130000)); |
| assert!(validator.validate_time(150000)); |
| assert!(!validator.validate_time(125900)); |
| assert!(!validator.validate_time(150100)); |
| } |
| |
| } |
|
|