1#![allow(dead_code)]
2
3use crate::error::S3Error;
4use std::env;
5use std::fmt::{Debug, Formatter};
6
7#[derive(Debug, Clone)]
8pub struct AccessKeyId(pub String);
9
10impl AsRef<str> for AccessKeyId {
11 fn as_ref(&self) -> &str {
12 self.0.as_str()
13 }
14}
15
16impl AccessKeyId {
17 pub fn new(access_key_id: String) -> Self {
18 Self(access_key_id)
19 }
20}
21
22#[derive(Clone)]
23pub struct AccessKeySecret(pub String);
24
25impl Debug for AccessKeySecret {
26 fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
27 write!(f, "AccessKeySecret(<hidden>)")
28 }
29}
30
31impl AsRef<str> for AccessKeySecret {
32 fn as_ref(&self) -> &str {
33 self.0.as_str()
34 }
35}
36
37impl AccessKeySecret {
38 pub fn new(access_key_secret: String) -> Self {
39 Self(access_key_secret)
40 }
41}
42
43#[derive(Debug, Clone)]
44pub struct Credentials {
45 pub access_key_id: AccessKeyId,
46 pub access_key_secret: AccessKeySecret,
47}
48
49impl Credentials {
50 pub fn new<S>(key: S, secret: S) -> Self
51 where
52 S: Into<String>,
53 {
54 Self {
55 access_key_id: AccessKeyId(key.into()),
56 access_key_secret: AccessKeySecret(secret.into()),
57 }
58 }
59
60 pub fn try_from_env() -> Result<Self, S3Error> {
61 let access_key_id = env::var("S3_ACCESS_KEY_ID")?;
62 let access_key_secret = env::var("S3_ACCESS_KEY_SECRET")?;
63
64 Ok(Self {
65 access_key_id: AccessKeyId(access_key_id),
66 access_key_secret: AccessKeySecret(access_key_secret),
67 })
68 }
69}