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 {
18 let node = self.0.node();
19 Id::new(Arc::downgrade(node), node.ready_tx().clone())
20 }
21
22 pub fn get_mut(&mut self) -> Pin<&mut P> {
24 self.0.protected_mut()
25 }
26
27 pub fn into_inner(self) -> P
29 where
30 P: Unpin,
31 {
32 self.0.into_inner()
33 }
34}
35
36impl<P> AsRef<P> for Removed<P> {
37 fn as_ref(&self) -> &P {
38 self.0.protected()
39 }
40}
41
42impl<P> Deref for Removed<P> {
43 type Target = P;
44
45 fn deref(&self) -> &Self::Target {
46 self.0.protected()
47 }
48}
49
50impl<P: Unpin> DerefMut for Removed<P> {
51 fn deref_mut(&mut self) -> &mut Self::Target {
52 self.0.protected_mut().get_mut()
53 }
54}