use super::PlaybackInfoRequest;
use crate::{
api::emby::{API, PlaybackInfo, User},
client::BuildableClient,
network::{NetworkPlugin, NetworkProvider},
};
pub struct Client {
provider: NetworkProvider,
}
impl BuildableClient for Client {
fn build_from_plugins(plugins: Vec<Box<dyn NetworkPlugin>>) -> Self {
let provider = NetworkProvider::new(plugins);
Client { provider }
}
}
impl Client {
pub async fn get_user(
&self,
base_url: impl Into<String>,
api_key: impl Into<String>,
user_id: impl Into<String>,
) -> Result<User, anyhow::Error> {
let request = API::get_user(base_url, api_key, user_id);
let response = self.provider.send_request(&request).await?;
let result: User = response.json().await?;
Ok(result)
}
pub async fn playback_info(
&self,
base_url: impl Into<String>,
api_key: impl Into<String>,
request: &PlaybackInfoRequest,
) -> Result<PlaybackInfo, anyhow::Error> {
let request = API::playback_info(
base_url,
api_key,
request.item_id.clone(),
request.media_source_id.clone(),
request.method,
request.body.clone(),
request.content_type.clone(),
);
let response = self.provider.send_request(&request).await?;
let result: PlaybackInfo = response.json().await?;
Ok(result)
}
}