reqsign/
lib.rs

1//! Signing API requests without effort.
2//!
3//! # Example
4//!
5//! ```rust,no_run
6//! use anyhow::Result;
7//! use reqsign::AwsConfig;
8//! use reqsign::AwsDefaultLoader;
9//! use reqsign::AwsV4Signer;
10//! use reqwest::Client;
11//! use reqwest::Request;
12//! use reqwest::Url;
13//!
14//! #[tokio::main]
15//! async fn main() -> Result<()> {
16//!     // Signer can load region and credentials from environment by default.
17//!     let client = Client::new();
18//!     let config = AwsConfig::default().from_profile().from_env();
19//!     let loader = AwsDefaultLoader::new(client.clone(), config);
20//!     let signer = AwsV4Signer::new("s3", "us-east-1");
21//!     // Construct request
22//!     let url = Url::parse("https://s3.amazonaws.com/testbucket")?;
23//!     let mut req = reqwest::Request::new(http::Method::GET, url);
24//!     // Signing request with Signer
25//!     let credential = loader.load().await?.unwrap();
26//!     signer.sign(&mut req, &credential)?;
27//!     // Sending already signed request.
28//!     let resp = client.execute(req).await?;
29//!     println!("resp got status: {}", resp.status());
30//!     Ok(())
31//! }
32//! ```
33//!
34//! # Available Services
35//!
36//! - [Aliyun OSS][crate::AliyunOssSigner] for Aliyun OSS.
37//! - [AWS SigV4][crate::AwsV4Signer] for AWS services like S3.
38//! - [Azure Storage][crate::AzureStorageSigner] for Azure Storage services like Azure Blob Service.
39//! - [Google][crate::GoogleSigner] for All google cloud services like Google Cloud Storage Service.
40//! - [Huawei Cloud OBS][crate::HuaweicloudObsSigner] for Huawei Cloud Object Storage Service (OBS).
41//!
42//! # Features
43//!
44//! reqsign support [`http::Request`] by default. Other request types support are hided
45//! under feature gates to reduce dependencies.
46//!
47//! - `reqwest_request`: Enable to support signing [`reqwest::Request`]
48//! - `reqwest_blocking_request`: Enable to support signing [`reqwest::blocking::Request`]
49
50// Make sure all our public APIs have docs.
51#![warn(missing_docs)]
52
53#[cfg(feature = "services-aliyun")]
54mod aliyun;
55#[cfg(feature = "services-aliyun")]
56pub use aliyun::*;
57
58#[cfg(feature = "services-aws")]
59mod aws;
60#[cfg(feature = "services-aws")]
61pub use aws::*;
62
63#[cfg(feature = "services-azblob")]
64mod azure;
65#[cfg(feature = "services-azblob")]
66pub use azure::*;
67
68#[cfg(feature = "services-google")]
69mod google;
70#[cfg(feature = "services-google")]
71pub use google::*;
72
73#[cfg(feature = "services-huaweicloud")]
74mod huaweicloud;
75#[cfg(feature = "services-huaweicloud")]
76pub use huaweicloud::*;
77
78#[cfg(feature = "services-oracle")]
79mod oracle;
80#[cfg(feature = "services-oracle")]
81pub use oracle::*;
82
83#[cfg(feature = "services-tencent")]
84mod tencent;
85#[cfg(feature = "services-tencent")]
86pub use tencent::*;
87
88mod ctx;
89mod dirs;
90mod hash;
91mod request;
92mod time;