1use crate::io::fd::handles;
2pub mod datagram;
3pub mod event;
4pub mod fd;
5pub mod fs;
6pub(crate) mod outputs;
7pub mod recv;
8pub mod socket;
9pub mod transfer;
10
11use event::{batch, net::accept};
12
13use crate::{
14 Errno,
15 driver::{
16 result::{
17 poll,
18 poll::fault::{Echo, Fault},
19 },
20 retained::flight::cancel,
21 route,
22 },
23};
24
25#[repr(transparent)]
33pub struct Event<'d>(event::Kind<'d>);
34
35impl<'d> Event<'d> {
36 pub fn into_kind(self) -> event::Kind<'d> {
37 self.0
38 }
39
40 pub fn route(&self) -> route::Route {
41 match &self.0 {
42 event::Kind::Accept(done) => done.token().route(),
43 event::Kind::Recv(done) | event::Kind::RetiredRecv(done) => done.token().route(),
44 event::Kind::Send(done) => done.token().route(),
45 event::Kind::Socket(done) => done.token().route(),
46 event::Kind::Tuning(done) => done.token().route(),
47 event::Kind::Connect(done) => done.token().route(),
48 event::Kind::Open(done) => done.token().route(),
49 event::Kind::Write(done) => done.token().route(),
50 event::Kind::Read(done) => done.token().route(),
51 event::Kind::Sync(done) => done.token().route(),
52 event::Kind::Shutdown => route::Route::FRAMEWORK,
53 }
54 }
55}
56
57impl<'d> From<event::Kind<'d>> for Event<'d> {
58 fn from(kind: event::Kind<'d>) -> Self {
59 Self(kind)
60 }
61}
62
63const _: () =
64 assert!(std::mem::size_of::<Event<'static>>() == std::mem::size_of::<event::Kind<'static>>());
65
66#[derive(Debug)]
70pub enum Reclaimed {
71 Fault(Fault),
73 Reactor(poll::Cause),
75 Cancellation(cancel::Failure),
77 Close {
78 slot: handles::PhysicalSlot,
79 file: poll::Close,
80 reactor: Result<(), poll::Cause>,
81 },
82 Accept {
83 echo: Echo,
84 result: Result<handles::Reclaimed, accept::Failure>,
85 flow: batch::Flow,
86 },
87 AcceptRoute {
88 target: route::Token,
89 cause: accept::Failure,
90 flow: batch::Flow,
91 },
92 Recv {
93 echo: Echo,
94 result: Result<usize, Errno>,
95 flow: batch::Flow,
96 },
97 RecvRoute {
98 target: route::Token,
99 result: Result<transfer::Len, Errno>,
100 flow: batch::Flow,
101 },
102 Send {
103 echo: Echo,
104 result: Result<transfer::Len, Errno>,
105 },
106 Connect {
107 echo: Echo,
108 result: Result<(), event::net::connect::Error>,
109 },
110 Socket {
111 echo: Echo,
112 slot: handles::PhysicalSlot,
113 result: Result<(), socket::Create>,
114 close: Option<Result<(), Errno>>,
115 },
116 Open {
117 echo: Echo,
118 result: Result<(), Errno>,
119 close: Option<Result<(), Errno>>,
120 },
121 Write {
122 echo: Echo,
123 result: Result<transfer::Len, Errno>,
124 },
125 Read {
126 echo: Echo,
127 result: Result<transfer::Len, Errno>,
128 },
129 Sync {
130 echo: Echo,
131 result: Result<(), Errno>,
132 },
133 Tuning {
134 echo: Echo,
135 result: Result<(), Errno>,
136 },
137 Shutdown,
138}