Skip to main content

tvdata_rs/
batch.rs

1use std::collections::BTreeMap;
2
3use crate::error::{Error, ErrorKind};
4use crate::scanner::Ticker;
5
6#[derive(Debug, Clone, PartialEq, Eq)]
7pub struct SymbolFailure {
8    pub symbol: Ticker,
9    pub kind: ErrorKind,
10    pub message: String,
11    pub retryable: bool,
12}
13
14impl SymbolFailure {
15    pub fn from_error(symbol: Ticker, error: Error) -> Self {
16        let kind = error.kind();
17        let retryable = error.is_retryable();
18        Self {
19            symbol,
20            kind,
21            message: error.to_string(),
22            retryable,
23        }
24    }
25}
26
27#[derive(Debug, Clone, PartialEq)]
28pub struct BatchResult<T> {
29    pub successes: BTreeMap<Ticker, T>,
30    pub missing: Vec<Ticker>,
31    pub failures: Vec<SymbolFailure>,
32}
33
34impl<T> Default for BatchResult<T> {
35    fn default() -> Self {
36        Self {
37            successes: BTreeMap::new(),
38            missing: Vec::new(),
39            failures: Vec::new(),
40        }
41    }
42}
43
44impl<T> BatchResult<T> {
45    pub fn is_empty(&self) -> bool {
46        self.successes.is_empty() && self.missing.is_empty() && self.failures.is_empty()
47    }
48
49    pub fn len(&self) -> usize {
50        self.successes.len() + self.missing.len() + self.failures.len()
51    }
52}