convertor 2.6.12

A profile converter for surge/clash.
Documentation
use crate::config::client_config::{ParseClientError, ProxyClient};
use crate::config::provider_config::Provider;
use crate::error::{EncryptError, QueryError};
use crate::url::convertor_url::ConvertorUrlType;
use std::str::Utf8Error;
use thiserror::Error;
use url::Url;

#[derive(Debug, Error)]
pub enum UrlBuilderError {
    #[error("无法获取 sub_host: {0}")]
    NoSubHost(Url),

    #[error("创建 UrlBuilder 时, 未找到配置供应商: {0}")]
    ProviderNotFound(Provider),

    #[error("创建 UrlBuilder 时, 未找到代理客户端配置: {0}")]
    ClientNotFound(ProxyClient),

    #[error("从 URL 中解析失败, 没有 query 参数: {0}")]
    ParseFromUrlNoQuery(Url),

    #[error("不支持将 {0} 构造为 SurgeHeader")]
    UnsupportedUrlType(ConvertorUrlType),

    #[error("无法加密/解密 raw_sub_url: {0}")]
    EncryptError(#[from] EncryptError),

    #[error(transparent)]
    QueryError(#[from] QueryError),
}

#[derive(Debug, Error)]
pub enum ParseUrlError {
    #[error("无法从 URL 中解析 ConvertorUrl: 缺少查询参数: {0}")]
    NotFoundParam(&'static str),

    #[error("无法从 URL 中解析 ConvertorUrl: 没有查询字符串")]
    UrlNoQuery(String),

    #[error(transparent)]
    ParseClientError(#[from] ParseClientError),

    #[error(transparent)]
    ParseServerError(#[from] url::ParseError),

    #[error(transparent)]
    ParseNumError(#[from] std::num::ParseIntError),

    #[error(transparent)]
    ParseBoolError(#[from] std::str::ParseBoolError),

    #[error(transparent)]
    Utf8Error(#[from] Utf8Error),
}

#[derive(Debug, Error)]
pub enum EncodeUrlError {
    #[error("构造 ${0} query 失败: 缺少必要参数 {1}")]
    NotFoundParam(&'static str, &'static str),

    #[error("无法提取 raw_sub_url 的主机和端口信息: {0}")]
    NoRawSubHost(String),

    #[error(transparent)]
    UrlParseError(#[from] url::ParseError),
}