use hyper::http::uri::InvalidUri;
use std::io;
use serde::{Deserialize, Serialize};
use thiserror::Error;
#[derive(Debug, Error)]
#[non_exhaustive]
pub enum RustWistiaError {
#[error("no such file: the source file path `{0}` should exist")]
FileNotFound(String),
#[error("environment variable `{name}` must be set")]
EnvVarNotFound { name: String },
#[error("{video_id}: no such asset ({r#type}) for video.\n Valid Assets: {valid_types:?}")]
AssetNotFound {
r#type: String,
video_id: String,
valid_types: Vec<String>,
},
#[error("An argument for `media_id` or `media` is required.")]
MediaIsRequired,
#[error(
"invalid request\n status: {status_code:?})\n reason: {reason}\n error: {error:#?}"
)]
Request {
status_code: u16,
reason: String,
error: WistiaError,
},
#[error("unknown rust-wistia error")]
Unknown,
#[error(transparent)]
Io(#[from] io::Error),
#[error(transparent)]
Hyper(#[from] hyper::Error),
#[error(transparent)]
Http(#[from] hyper::http::Error),
#[error(transparent)]
InvalidUri(#[from] InvalidUri),
#[error(transparent)]
SerdeJson(#[from] serde_json::Error),
#[error(transparent)]
SerdeUrlEncodedSer(#[from] serde_urlencoded::ser::Error),
}
#[derive(Debug, Default, Deserialize, Serialize)]
pub struct WistiaError {
#[serde(default)]
#[serde(rename = "error")]
pub message: String,
pub code: Option<String>,
pub detail: Option<String>,
}