Skip to main content

yfinance_rs/core/diagnostics/
issue.rs

1use std::fmt;
2
3/// Why provider data could not be represented losslessly.
4#[non_exhaustive]
5#[derive(Debug, Clone, PartialEq, Eq)]
6pub enum ProjectionIssue {
7    /// A required provider field was absent or null.
8    MissingRequiredField {
9        /// Field name.
10        field: &'static str,
11    },
12    /// One or more required provider fields were absent or null.
13    MissingRequiredFields {
14        /// Field names.
15        fields: Vec<&'static str>,
16    },
17    /// A provider field was present but malformed.
18    InvalidField {
19        /// Field name.
20        field: &'static str,
21        /// Additional details.
22        details: String,
23    },
24    /// A present value could not be represented by the target public type.
25    ConversionFailed {
26        /// Target public type or field.
27        target: &'static str,
28    },
29    /// A monetary value was present, but no currency could be resolved.
30    CurrencyUnresolved,
31    /// A provider currency code was present but invalid.
32    InvalidCurrency {
33        /// Raw provider currency code.
34        code: String,
35    },
36    /// Yahoo returned an API or provider-level error.
37    ProviderError {
38        /// Error details.
39        message: String,
40    },
41    /// Yahoo did not return a requested module or feature.
42    ProviderUnavailable {
43        /// Feature or module name.
44        feature: &'static str,
45    },
46}
47
48impl fmt::Display for ProjectionIssue {
49    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
50        match self {
51            Self::MissingRequiredField { field } => write!(f, "missing required field {field}"),
52            Self::MissingRequiredFields { fields } => {
53                write!(f, "missing required fields {}", fields.join(", "))
54            }
55            Self::InvalidField { field, details } => write!(f, "invalid field {field}: {details}"),
56            Self::ConversionFailed { target } => write!(f, "conversion failed for {target}"),
57            Self::CurrencyUnresolved => f.write_str("currency unresolved"),
58            Self::InvalidCurrency { code } => write!(f, "invalid currency code {code}"),
59            Self::ProviderError { message } => write!(f, "provider error: {message}"),
60            Self::ProviderUnavailable { feature } => {
61                write!(f, "provider did not return {feature}")
62            }
63        }
64    }
65}