s3-headers-lite 0.1.0

A minimal, lightweight alternative to the official AWS crates. Only the headers necessary for communicating with S3-like services.
Documentation

s3-headers-lite

CI crates.io docs.rs License

A minimal, lighter-weight alternative to the official AWS crates. Zero aws-* dependencies.

Only generates the headers necessary for communicating with S3-like services, so use any HTTP client you want. Examples use reqwest, but any HTTP client will work.

Get

use s3_headers_lite::{S3HeadersBuilder, ValidS3Url};

let url = ValidS3Url::parse("https://example.s3.amazonaws.com/test/test.json").unwrap();

let headers = S3HeadersBuilder::new(&url)
  .set_access_key(&access_key)
  .set_secret_key(&secret_key)
  .set_region(&region)
  .set_method("GET")
  .build();

let response = reqwest::blocking::Client::new()
  .get(url.as_url().clone())
  .headers(reqwest::header::HeaderMap::from_iter(headers.into_iter().map(
    |(k, v)| {
      (
        reqwest::header::HeaderName::from_str(k).unwrap(),
        reqwest::header::HeaderValue::from_str(&v).unwrap(),
      )
    },
  )))
  .send()
  .unwrap();

Put

use s3_headers_lite::{S3HeadersBuilder, ValidS3Url};

let url = ValidS3Url::parse("https://example.s3.amazonaws.com/test/test.json").unwrap();
let content = "{\"c\":\"d\"}\n".as_bytes().to_vec();

let headers = S3HeadersBuilder::new(&url)
  .set_access_key(&access_key)
  .set_secret_key(&secret_key)
  .set_region(&region)
  .set_method("PUT")
  .set_payload_hash_with_content(&content)
  .build();

let response = reqwest::blocking::Client::new()
  .put(url.as_url().clone())
  .headers(reqwest::header::HeaderMap::from_iter(headers.into_iter().map(
    |(k, v)| {
      (
        reqwest::header::HeaderName::from_str(k).unwrap(),
        reqwest::header::HeaderValue::from_str(&v).unwrap(),
      )
    },
  )))
  .send()
  .unwrap();

List

use s3_headers_lite::{S3HeadersBuilder, ValidS3Url};

let url = ValidS3Url::parse("https://example.s3.amazonaws.com/").unwrap();

let headers = S3HeadersBuilder::new(&url)
  .set_access_key(&access_key)
  .set_secret_key(&secret_key)
  .set_region(&region)
  .set_method("GET")
  .build();

let response = reqwest::blocking::Client::new()
  .get(url.as_url().clone())
  .headers(reqwest::header::HeaderMap::from_iter(headers.into_iter().map(
    |(k, v)| {
      (
        reqwest::header::HeaderName::from_str(k).unwrap(),
        reqwest::header::HeaderValue::from_str(&v).unwrap(),
      )
    },
  )))
  .send()
  .unwrap();