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}