tvdata-rs 0.1.2

Async Rust client for TradingView screener queries, search, calendars, quote snapshots, and OHLCV history.
Documentation
use std::collections::BTreeMap;

use crate::error::{Error, ErrorKind};
use crate::scanner::Ticker;

#[derive(Debug, Clone, PartialEq, Eq)]
pub struct SymbolFailure {
    pub symbol: Ticker,
    pub kind: ErrorKind,
    pub message: String,
    pub retryable: bool,
}

impl SymbolFailure {
    pub fn from_error(symbol: Ticker, error: Error) -> Self {
        let kind = error.kind();
        let retryable = error.is_retryable();
        Self {
            symbol,
            kind,
            message: error.to_string(),
            retryable,
        }
    }
}

#[derive(Debug, Clone, PartialEq)]
pub struct BatchResult<T> {
    pub successes: BTreeMap<Ticker, T>,
    pub missing: Vec<Ticker>,
    pub failures: Vec<SymbolFailure>,
}

impl<T> Default for BatchResult<T> {
    fn default() -> Self {
        Self {
            successes: BTreeMap::new(),
            missing: Vec::new(),
            failures: Vec::new(),
        }
    }
}

impl<T> BatchResult<T> {
    pub fn is_empty(&self) -> bool {
        self.successes.is_empty() && self.missing.is_empty() && self.failures.is_empty()
    }

    pub fn len(&self) -> usize {
        self.successes.len() + self.missing.len() + self.failures.len()
    }
}