13个版本

0.5.1 2021年7月18日
0.5.0 2021年1月9日
0.4.3 2020年11月18日
0.3.1 2020年7月20日
0.1.1 2018年12月26日

配置中排名第542

每月下载量27

Apache-2.0 OR MIT

330KB
3.5K SLoC

Spirit-hyper

Travis Build Status

一个用于创建配置reqwest客户端和保持配置更新的助手。它是spirit系统的一部分。

请参阅文档示例

许可证

许可协议为以下之一

由您选择。

贡献

除非您明确表示,否则根据Apache-2.0许可证定义,您有意提交的任何贡献,包括在作品中,都应按上述方式双重许可,不附加任何额外条款或条件。


lib.rs:

这有助于配置reqwest Client

这是spirit系统的一部分。

有两种级别的支持。第一种是让Spirit加载ReqwestClient配置片段,并调用其方法之一来创建Client或其他。

另一种更方便的方法是将提取函数与AtomicClient配对,并让Spirit始终在其中保持Client的最新版本。

分割和功能

ReqwestClient位于crate的顶部。然而,reqwest提供了HTTP客户端的阻塞和异步版本。因此,此crate提供了两个子模块,每个模块都提供了相应的支持(注意异步模块的名称为futures,因为async是一个关键字)。管道通过相关的IntoClient转换进行配置,并安装到相关的AtomicClient

功能可以启用此处功能的一部分,并对应于reqwest的一些功能。特别是

  • gzip:开启enable-gzip配置选项。
  • brotli:开启enable-brotli配置选项。
  • native-tls:开启tls-identitytls-identity-passwordtls-accept-invalid-hostnames选项。
  • blocking:整个blocking模块以及创建阻塞客户端和构建器的相关方法。

从0.3版本迁移

  • 您可能需要启用某些功能(如果您想继续使用阻塞API,则需要blocking功能,但您可能还希望开启native-tlsgzip功能以获得相同的功能覆盖)。
  • 您使用的一部分已移动到子模块,但其他部分应具有相同或类似的API
  • 在配置提取和安装之间,需要添加.transform(IntoClient),以选择您是否对阻塞或异步版本感兴趣。

示例

use serde::Deserialize;
use spirit::{Empty, Pipeline, Spirit};
use spirit::prelude::*;
use spirit_reqwest::ReqwestClient;
// Here we choose if we want blocking or async (futures module)
use spirit_reqwest::blocking::{AtomicClient, IntoClient};

#[derive(Debug, Default, Deserialize)]
struct Cfg {
    #[serde(default)]
    client: ReqwestClient,
}

impl Cfg {
    fn client(&self) -> ReqwestClient {
        self.client.clone()
    }
}

fn main() {
    let client = AtomicClient::unconfigured(); // Get a default config before we get configured
    Spirit::<Empty, Cfg>::new()
        .with(
            Pipeline::new("http client")
                .extract_cfg(Cfg::client)
                // Choose if you want blocking or async client
                // (eg. spirit_reqwest::blocking::IntoClient or
                // spirit_reqwest::futures::IntoClient)
                .transform(IntoClient)
                // Choose where to store it
                .install(client.clone())
        )
        .run(move |_| {
            let page = client
                .get("https://www.rust-lang.net.cn")
                .send()?
                .error_for_status()?
                .text()?;
            println!("{}", page);
            Ok(())
        });
}

依赖项

~6–22MB
~342K SLoC