use crate::auth::AuthSession;
use crate::error::CirrusResult;
use async_trait::async_trait;
use std::borrow::Cow;
#[derive(Debug, Clone)]
pub struct StaticTokenAuth {
access_token: String,
instance_url: String,
}
impl StaticTokenAuth {
pub fn new(access_token: impl Into<String>, instance_url: impl Into<String>) -> Self {
let mut instance_url: String = instance_url.into();
if instance_url.ends_with('/') {
instance_url.pop();
}
Self {
access_token: access_token.into(),
instance_url,
}
}
}
#[async_trait]
impl AuthSession for StaticTokenAuth {
async fn access_token(&self) -> CirrusResult<Cow<'_, str>> {
Ok(Cow::Borrowed(&self.access_token))
}
fn instance_url(&self) -> &str {
&self.instance_url
}
}
#[cfg(test)]
#[allow(clippy::unwrap_used, clippy::expect_used, clippy::panic)]
mod tests {
use super::*;
#[tokio::test]
async fn returns_provided_token_and_url() {
let auth = StaticTokenAuth::new("tok", "https://example.my.salesforce.com");
assert_eq!(auth.access_token().await.unwrap(), "tok");
assert_eq!(auth.instance_url(), "https://example.my.salesforce.com");
}
#[tokio::test]
async fn strips_trailing_slash_from_instance_url() {
let auth = StaticTokenAuth::new("tok", "https://example.my.salesforce.com/");
assert_eq!(auth.instance_url(), "https://example.my.salesforce.com");
}
}