briteverify_rs/
errors.rs

1//! ## Errors
2
3// Third-Party Imports
4use reqwest::header::InvalidHeaderValue;
5use thiserror::Error;
6
7// Crate-Level Imports
8use super::types::{
9    AddressArrayBuilder, BulkListCRUDError, VerificationRequestBuilder, VerificationResponse,
10};
11
12/// Errors encountered when building a
13/// [`BriteVerifyClient`][crate::BriteVerifyClient]
14/// instance with a customized configuration
15#[derive(Debug, Error)]
16pub enum BriteVerifyClientError {
17    /// No API key provided when constructing a
18    /// [`BriteVerifyClient`][crate::BriteVerifyClient]
19    /// instance
20    #[error("No BriteVerify API key provided")]
21    MissingApiKey,
22    /// The API key provided when constructing a
23    /// [`BriteVerifyClient`][crate::BriteVerifyClient]
24    /// instance is either invalid or unauthorized
25    #[error("Invalid or unauthorized BriteVerify API key")]
26    InvalidApiKey,
27    /// A request cannot be "built" for sending
28    #[error("Request cannot be built!")]
29    UnbuildableRequest(#[from] reqwest::Error),
30    /// A request cannot be cloned when automatic
31    /// rate-limit retry is enabled
32    #[error("Request cannot be cloned for retry!")]
33    UnclonableRequest,
34    /// The BriteVerify API responded to a single-transaction
35    /// verification request with data that it shouldn't have
36    /// or omitted data it should have included
37    #[error("Response type doesn't match expectation")]
38    MismatchedVerificationResponse(Box<VerificationResponse>),
39    /// No bulk verification list exists for a given identifier
40    #[error("No bulk verification list found for list with id: {:?}", .0.list_id)]
41    BulkListNotFound(Box<BulkListCRUDError>),
42    /// Invalid or unusable API key provided when constructing
43    /// a [`BriteVerifyClient`][crate::BriteVerifyClient] instance
44    #[error(transparent)]
45    InvalidHeaderValue(#[from] InvalidHeaderValue),
46    /// Invalid or unusable base url provided when constructing
47    /// a [`BriteVerifyClient`][crate::BriteVerifyClient] instance
48    #[error(transparent)]
49    InvalidBaseUrl(#[from] url::ParseError),
50    /// A usable request could not be created
51    #[error("Unusable request")]
52    UnusableRequest(#[from] BriteVerifyTypeError),
53    /// The BriteVerify API returned an unusable response
54    /// (based on HTTP status code)
55    #[error("Unusable (non-2xx) response")]
56    UnusableResponse(Box<reqwest::Response>),
57    /// A catch-all error for any other errors encountered
58    #[error(transparent)]
59    Other(#[from] anyhow::Error),
60}
61
62/// Errors encountered when building a
63/// `BriteVerifyClient`-recognized request
64#[derive(Debug, Error)]
65pub enum BriteVerifyTypeError {
66    /// The builder state is incomplete
67    #[error("Current builder state cannot be used to construct a valid `VerificationRequest`")]
68    UnbuildableRequest(Box<VerificationRequestBuilder>),
69    /// The builder state is incomplete
70    #[error("Current builder state cannot be used to construct a valid `StreetAddressArray`")]
71    UnbuildableAddressArray(Box<AddressArrayBuilder>),
72    /// The value cannot be unambiguously
73    /// resolved to a known request type
74    #[error(
75        "Value cannot be resolved to a known \
76        BriteVerify API request type unambiguously: {:?}",
77        .0,
78    )]
79    AmbiguousTryFromValue(String),
80    /// A catch-all error for any other errors encountered
81    #[error(transparent)]
82    Other(#[from] anyhow::Error),
83}