自定义Resolver

vielpork中,Resolver是一个trait,用于解析资源的来源。vielpork提供了一个内置的UrlResolver,用于从URL下载资源。您可以通过实现Resolver trait来自定义解析逻辑。

vielport::base::traits中定义的这个trait是ResourceResolverResourceResolver定义了一个方法,用于解析资源的来源。


#![allow(unused)]
fn main() {
#[async_trait]
pub trait ResourceResolver: Send + Sync {
    async fn resolve(&self, resource: &DownloadResource) -> Result<ResolvedResource>;
}
}

Resolver何为?

Resolver用来将DownloadResource转换为ResolvedResourceDownloadResource是一个枚举类型,它包含了资源的不同类型。ResolvedResource是一个结构体,它包含了HTTP请求所需的详细信息。


#![allow(unused)]
fn main() {
// `vielpork::base::enums`中定义的`DownloadResource`枚举类型

#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum DownloadResource {
    Url(String),
    Id(String), 
    Params(Vec<String>),
    HashMap(HashMap<String, String>),
    Resolved(ResolvedResource),
}
}

#![allow(unused)]
fn main() {
// `vielpork::base::structs`中定义的`ResolvedResource`结构体
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ResolvedResource {
    pub id: u32,
    pub url: String,
    pub headers: Vec<(String, String)>,
    pub auth: Option<AuthMethod>,
}
}

其中,AuthMethod支持BasicBearer以及ApiKey三种认证方式。


#![allow(unused)]
fn main() {
// `vielpork::base::enums`中定义的`AuthMethod`枚举类型

#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub enum AuthMethod {
    None,
    Basic { username: String, password: String },
    Bearer { token: String },
    ApiKey { key: String, header: String },
}
}