async_selector/selector/
removed.rs1use std::{
2 ops::{Deref, DerefMut},
3 pin::Pin,
4 sync::Arc,
5};
6
7use crate::{list, selector::Id, task::Task};
8
9#[must_use = "memory occupied by a removed task is not freed immediately, see Selector docs"]
13pub struct Removed<P>(pub(super) list::Removed<Task<P>>);
14
15impl<P> Removed<P> {
16 pub fn id(&self) -> Id<P> {
18 Id(Arc::downgrade(self.0.node()))
19 }
20
21 pub fn get_mut(&mut self) -> Pin<&mut P> {
23 self.0.protected_mut()
24 }
25
26 pub fn into_inner(self) -> P
28 where
29 P: Unpin,
30 {
31 self.0.into_inner()
32 }
33}
34
35impl<P> AsRef<P> for Removed<P> {
36 fn as_ref(&self) -> &P {
37 self.0.protected()
38 }
39}
40
41impl<P> Deref for Removed<P> {
42 type Target = P;
43
44 fn deref(&self) -> &Self::Target {
45 self.0.protected()
46 }
47}
48
49impl<P: Unpin> DerefMut for Removed<P> {
50 fn deref_mut(&mut self) -> &mut Self::Target {
51 self.0.protected_mut().get_mut()
52 }
53}