solaredge 0.9.1

SolarEdge API client
Documentation
use std::fmt;

use http_adapter::http;

#[derive(Debug)]
pub enum Error<E> {
	UrlParse(url::ParseError),
	UrlEncode(serde_urlencoded::ser::Error),
	HttpRequest(E),
	Json(serde_json::Error),
	Api(http::StatusCode, String),
}

impl<E: fmt::Display> fmt::Display for Error<E> {
	fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
		match self {
			Error::UrlParse(e) => {
				write!(f, "URL parse error: {e}")
			}
			Error::UrlEncode(e) => {
				write!(f, "Parameter encoding error: {e}")
			}
			Error::HttpRequest(e) => {
				write!(f, "HTTP request error: {e}")
			}
			Error::Json(e) => {
				write!(f, "JSON error: {e}")
			}
			Error::Api(status, _) => {
				write!(f, "Solaredge HTTP API error: {status}")
			}
		}
	}
}

impl<E: fmt::Debug + fmt::Display> std::error::Error for Error<E> {}

impl<E> From<url::ParseError> for Error<E> {
	fn from(s: url::ParseError) -> Self {
		Self::UrlParse(s)
	}
}

impl<E> From<serde_urlencoded::ser::Error> for Error<E> {
	fn from(s: serde_urlencoded::ser::Error) -> Self {
		Self::UrlEncode(s)
	}
}

impl<E> From<serde_json::Error> for Error<E> {
	fn from(s: serde_json::Error) -> Self {
		Self::Json(s)
	}
}