blob: 27812f89dc059efb86563a01ec7a315e5116156d [file] [log] [blame]
#[derive(Debug, PartialEq)]
pub struct Credentials {
access_key: String,
access_secret: String,
session_token: Option<String>,
}
pub trait CredentialProvider {
fn get_credentials(&self) -> Credentials;
}
pub struct StaticCredentialProvider {
access_key: String,
access_secret: String,
}
impl StaticCredentialProvider {
pub fn new(access_key: &str, access_secret: &str) -> Self {
Self {
access_key: access_key.to_owned(),
access_secret: access_secret.to_owned(),
}
}
}
impl CredentialProvider for StaticCredentialProvider {
fn get_credentials(&self) -> Credentials {
Credentials {
access_key: self.access_key.clone(),
access_secret: self.access_secret.clone(),
session_token: None,
}
}
}
#[derive(Debug, Default)]
pub struct EnvironmentVariableCredentialProvider {
access_key: String,
access_secret: String,
}
impl EnvironmentVariableCredentialProvider {
pub fn new() -> Result<Self, std::env::VarError> {
let access_key = std::env::var("ACCESS_KEY")?;
let access_secret = std::env::var("ACCESS_SECRET")?;
Ok(Self {
access_key,
access_secret,
})
}
}
impl CredentialProvider for EnvironmentVariableCredentialProvider {
fn get_credentials(&self) -> Credentials {
Credentials {
access_key: self.access_key.clone(),
access_secret: self.access_secret.clone(),
session_token: None,
}
}
}
#[cfg(test)]
mod test {
use super::*;
#[test]
fn test_static_credentials_provider() {
let provider = StaticCredentialProvider::new("ak", "as");
let credentials = provider.get_credentials();
assert_eq!(
credentials,
Credentials {
access_key: String::from("ak"),
access_secret: String::from("as"),
session_token: None,
}
);
}
#[test]
fn test_environment_variable_credential_provider() {
let env_credentials_provider = EnvironmentVariableCredentialProvider::new();
assert_eq!(true, env_credentials_provider.is_err());
}
}