use std::fmt::{self, Debug, Display, Formatter};
use serde::Deserialize;
use crate::{client::Client, error::ApiResult, session::SessionList};
#[derive(Deserialize, Debug, PartialEq, Eq, Clone, Hash)]
#[serde(transparent)]
pub struct AttributeId(String);
impl AttributeId {
#[must_use]
pub fn as_str(&self) -> &str {
&self.0
}
pub async fn fetch(&self, client: &Client) -> ApiResult<Attribute> {
client.get_attribute(self).await
}
}
impl Display for AttributeId {
fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
write!(f, "{}", self.0)
}
}
#[derive(Deserialize, Debug, PartialEq, Eq, Clone)]
#[serde(rename_all = "PascalCase")]
pub struct Attribute {
pub id: AttributeId,
pub description: String,
pub short_name: String,
pub font_color: String,
pub background_color: String,
pub show_on_sessions_with_no_comps: bool,
}
impl Attribute {
pub async fn sessions(&self, client: &Client) -> ApiResult<SessionList> {
Ok(client
.list_sessions()
.await?
.filter_containing_attribute(&self.id))
}
}