macro_rules! impls_for_stateful_refs {
($container:tt) => {
impl $container<ToRoom> {
#[doc = "Create new reference in [`ToRoom`] state."]
#[must_use]
pub fn new(room_id: $crate::api::control::RoomId) -> Self {
Self {
state: ToRoom(room_id),
}
}
#[must_use]
pub fn room_id(&self) -> &$crate::api::control::RoomId {
&self.state.0
}
#[must_use]
pub fn take_room_id(self) -> $crate::api::control::RoomId {
self.state.0
}
#[must_use]
pub fn push_member_id(
self,
member_id: $crate::api::control::MemberId,
) -> $container<ToMember> {
$container::<$crate::api::control::refs::ToMember>::new(
self.state.0,
member_id,
)
}
}
impl $container<$crate::api::control::refs::ToMember> {
#[must_use]
pub fn new(
room_id: $crate::api::control::RoomId,
member_id: $crate::api::control::MemberId,
) -> Self {
Self {
state: $crate::api::control::refs::ToMember(
room_id, member_id,
),
}
}
#[must_use]
pub fn room_id(&self) -> &$crate::api::control::RoomId {
&self.state.0
}
#[must_use]
pub fn member_id(&self) -> &$crate::api::control::MemberId {
&self.state.1
}
#[must_use]
pub fn take_member_id(
self,
) -> (
$crate::api::control::MemberId,
$container<$crate::api::control::refs::ToRoom>,
) {
(
self.state.1,
$container::<$crate::api::control::refs::ToRoom>::new(
self.state.0,
),
)
}
#[must_use]
pub fn push_endpoint_id(
self,
endpoint_id: $crate::api::control::EndpointId,
) -> $container<$crate::api::control::refs::ToEndpoint> {
let (member_id, room_uri) = self.take_member_id();
let room_id = room_uri.take_room_id();
$container::<$crate::api::control::refs::ToEndpoint>::new(
room_id,
member_id,
endpoint_id,
)
}
#[must_use]
pub fn take_all(
self,
) -> ($crate::api::control::RoomId, $crate::api::control::MemberId)
{
let (member_id, room_url) = self.take_member_id();
(room_url.take_room_id(), member_id)
}
}
impl $container<$crate::api::control::refs::ToEndpoint> {
#[must_use]
pub fn new(
room_id: $crate::api::control::RoomId,
member_id: $crate::api::control::MemberId,
endpoint_id: $crate::api::control::EndpointId,
) -> Self {
Self {
state: $crate::api::control::refs::ToEndpoint(
room_id,
member_id,
endpoint_id,
),
}
}
#[inline]
#[must_use]
pub fn room_id(&self) -> &$crate::api::control::RoomId {
&self.state.0
}
#[inline]
#[must_use]
pub fn member_id(&self) -> &$crate::api::control::MemberId {
&self.state.1
}
#[inline]
#[must_use]
pub fn endpoint_id(&self) -> &$crate::api::control::EndpointId {
&self.state.2
}
#[must_use]
pub fn take_endpoint_id(
self,
) -> (
$crate::api::control::EndpointId,
$container<$crate::api::control::refs::ToMember>,
) {
(
self.state.2,
$container::<$crate::api::control::refs::ToMember>::new(
self.state.0,
self.state.1,
),
)
}
#[must_use]
pub fn take_all(
self,
) -> (
$crate::api::control::RoomId,
$crate::api::control::MemberId,
$crate::api::control::EndpointId,
) {
let (endpoint_id, member_url) = self.take_endpoint_id();
let (member_id, room_url) = member_url.take_member_id();
(room_url.take_room_id(), member_id, endpoint_id)
}
}
};
}