use std::fmt::{self, Debug, Display, Formatter};
use serde::Deserialize;
use crate::{client::Client, error::ApiResult, session::SessionList};
#[derive(Deserialize, Debug, PartialEq, Eq, Clone, Copy, Hash)]
#[serde(transparent)]
pub struct ScreenId(u32);
impl ScreenId {
#[must_use]
pub const fn into_u32(self) -> u32 {
self.0
}
pub async fn fetch(self, client: &Client) -> ApiResult<Screen> {
client.get_screen(self).await
}
}
impl Display for ScreenId {
fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
write!(f, "{}", self.0)
}
}
#[derive(Deserialize, Debug, PartialEq, Eq, Clone)]
#[serde(rename_all = "PascalCase")]
pub struct Screen {
pub id: ScreenId,
pub name: String,
pub screen_number: String,
pub has_custom_layout: bool,
pub total_seats: u32,
pub house_seats: u32,
}
impl Screen {
pub async fn sessions(&self, client: &Client) -> ApiResult<SessionList> {
Ok(client.list_sessions().await?.filter_by_screen(self.id))
}
}