Refactor
diff --git a/src/client.rs b/src/client.rs index c67ef55..3b1cdde 100644 --- a/src/client.rs +++ b/src/client.rs
@@ -8,40 +8,7 @@ Request, Response, }; -#[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, - } - } -} +use crate::credentials::CredentialProvider; #[derive(Default)] struct ClientConfig { @@ -159,20 +126,6 @@ assert_eq!(route_response.status.unwrap().code, Code::Ok as i32); } - #[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, - } - ); - } - #[tokio::test] async fn test_periodic_task() { let client_manager = ClientManager::default();
diff --git a/src/credentials.rs b/src/credentials.rs new file mode 100644 index 0000000..43d44a9 --- /dev/null +++ b/src/credentials.rs
@@ -0,0 +1,87 @@ +#[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()); + + } +}
diff --git a/src/lib.rs b/src/lib.rs index 57769fd..7ffd5e9 100644 --- a/src/lib.rs +++ b/src/lib.rs
@@ -1,3 +1,4 @@ pub mod client; +pub mod credentials; pub mod pb; pub mod server;