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