use std::sync::Arc;
use crate::builder::ClientBuilder;
use crate::oauth2::client::OAuth2Client;
use crate::oauth2::jwk::cache::JwtKeyCache;
use crate::Error;
#[derive(Clone)]
pub struct Client {
pub(crate) inner: Arc<ClientRef>,
}
pub(crate) struct ClientRef {
pub(crate) reqwest_client: reqwest::Client,
pub(crate) esi_url: String,
pub(crate) esi_validate_token_before_request: bool,
pub(crate) oauth2_client: Option<OAuth2Client>,
pub(crate) jwt_key_cache: JwtKeyCache,
pub(crate) jwt_issuers: Vec<String>,
pub(crate) jwt_audience: String,
}
impl Client {
pub fn new(user_agent: &str) -> Result<Client, Error> {
ClientBuilder::new().user_agent(user_agent).build()
}
pub fn builder() -> ClientBuilder {
ClientBuilder::new()
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_basic_client_build() {
let user_agent = "MyApp/1.0 (contact@example.com; +https://github.com/your/repo)";
let result = Client::new(user_agent);
assert!(result.is_ok())
}
#[test]
fn test_successful_builder_minimal() {
let builder = Client::builder();
assert!(builder.user_agent.is_none());
assert!(builder.client_id.is_none());
assert!(builder.client_secret.is_none());
assert!(builder.callback_url.is_none());
let esi_client = builder.build();
assert!(esi_client.is_ok());
}
}