s3_simple/
credentials.rs

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}