use serde::{Deserialize, Serialize};
use thiserror::Error;
#[derive(Debug, Error)]
pub enum TurnstileError {
#[error("Turnstile API error: {0:?}")]
SiteVerifyError(SiteVerifyErrors),
#[error("Legacy hyper error: {0:?}")]
LegacyHyperError(#[from] hyper_util::client::legacy::Error),
#[error("Hyper error: {0:?}")]
HyperError(#[from] hyper::Error),
#[error("Serde error: {0:?}")]
SerdeError(#[from] serde_json::Error),
}
pub type SiteVerifyErrors = Vec<SiteVerifyError>;
#[derive(Debug, Clone, Error, Deserialize, Serialize)]
pub enum SiteVerifyError {
#[serde(rename = "missing-input-secret")]
#[error("The secret parameter was not passed.")]
MissingInputSecret,
#[serde(rename = "invalid-input-secret")]
#[error("The secret parameter was invalid or did not exist.")]
InvalidInputSecret,
#[serde(rename = "missing-input-response")]
#[error("The response parameter was not passed.")]
MissingInputResponse,
#[serde(rename = "invalid-input-response")]
#[error("The response parameter is invalid or has expired.")]
InvalidInputResponse,
#[serde(rename = "invalid-widget-id")]
#[error(
"The widget ID extracted from the parsed site secret key was invalid or did not exist."
)]
InvalidWidgetId,
#[serde(rename = "invalid-parsed-secret")]
#[error("The secret extracted from the parsed site secret key was invalid.")]
InvalidParsedSecret,
#[serde(rename = "bad-request")]
#[error("The request was rejected because it was malformed.")]
BadRequest,
#[serde(rename = "timeout-or-duplicate")]
#[error("The response parameter has already been validated before.")]
TimeoutOrDuplicate,
#[serde(rename = "internal-error")]
#[error(
"An internal error happened while validating the response. The request can be retried."
)]
InternalError,
}