convertor 2.6.0+alpha

A profile converter for surge/clash.
Documentation
use headers::HeaderMap;
use reqwest::{Method, StatusCode};
use std::fmt::{Debug, Display, Formatter};
use url::Url;

#[derive(Debug)]
pub enum ApiResponse<T>
where
    T: Debug,
{
    Success(T),
    Failed(Box<ApiFailed>),
}

#[derive(Debug)]
pub struct ApiFailed {
    pub url: Url,
    pub method: Method,
    pub status: StatusCode,
    pub headers: HeaderMap,
    pub body: String,
}

impl Display for ApiFailed {
    fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
        writeln!(f, "[{}] {}", self.method, self.url)?;
        writeln!(f, "Status: {}", self.status)?;
        writeln!(f, "Headers:")?;
        for (key, value) in self.headers.iter() {
            writeln!(f, "\t{key}: {value:?}")?;
        }
        writeln!(f, "Body:")?;
        write!(f, "{}", self.body)
    }
}