use super::common::State;
use super::endpoint::Endpoint;
#[derive(Debug, Clone, PartialEq, Eq, Default)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[non_exhaustive]
pub struct Users {
#[cfg_attr(
feature = "serde",
serde(rename = "@state", default, skip_serializing_if = "Option::is_none")
)]
pub state: Option<State>,
#[cfg_attr(
feature = "serde",
serde(rename = "user", default, skip_serializing_if = "Vec::is_empty")
)]
pub users: Vec<User>,
}
impl Users {
pub fn new() -> Self {
Self::default()
}
pub fn with_user(mut self, user: User) -> Self {
self.users
.push(user);
self
}
}
#[derive(Debug, Clone, PartialEq, Eq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[non_exhaustive]
pub struct User {
#[cfg_attr(feature = "serde", serde(rename = "@entity"))]
pub entity: String,
#[cfg_attr(
feature = "serde",
serde(rename = "@state", default, skip_serializing_if = "Option::is_none")
)]
pub state: Option<State>,
#[cfg_attr(
feature = "serde",
serde(
rename = "display-text",
default,
skip_serializing_if = "Option::is_none"
)
)]
pub display_text: Option<String>,
#[cfg_attr(
feature = "serde",
serde(
rename = "associated-aors",
default,
skip_serializing_if = "Option::is_none"
)
)]
pub associated_aors: Option<super::types::Uris>,
#[cfg_attr(
feature = "serde",
serde(default, skip_serializing_if = "Option::is_none")
)]
pub roles: Option<UserRoles>,
#[cfg_attr(
feature = "serde",
serde(default, skip_serializing_if = "Option::is_none")
)]
pub languages: Option<String>,
#[cfg_attr(
feature = "serde",
serde(
rename = "cascaded-focus",
default,
skip_serializing_if = "Option::is_none"
)
)]
pub cascaded_focus: Option<String>,
#[cfg_attr(
feature = "serde",
serde(rename = "endpoint", default, skip_serializing_if = "Vec::is_empty")
)]
pub endpoints: Vec<Endpoint>,
}
impl User {
pub fn new(entity: impl Into<String>) -> Self {
Self {
entity: entity.into(),
state: None,
display_text: None,
associated_aors: None,
roles: None,
languages: None,
cascaded_focus: None,
endpoints: Vec::new(),
}
}
pub fn with_display_text(mut self, text: impl Into<String>) -> Self {
self.display_text = Some(text.into());
self
}
pub fn with_endpoint(mut self, endpoint: Endpoint) -> Self {
self.endpoints
.push(endpoint);
self
}
}
#[derive(Debug, Clone, PartialEq, Eq, Default)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[non_exhaustive]
pub struct UserRoles {
#[cfg_attr(
feature = "serde",
serde(rename = "entry", default, skip_serializing_if = "Vec::is_empty")
)]
pub entries: Vec<String>,
}