1use std::time::Duration;
2
3use futures::future::BoxFuture;
4use mm1_address::address::Address;
5use mm1_address::pool::Lease as AddressLease;
6use mm1_address::subnet::NetAddress;
7use mm1_common::errors::error_of::ErrorOf;
8use mm1_common::types::Never;
9use mm1_core::context::{BindArgs, BindErrorKind, ForkErrorKind, RecvErrorKind, SendErrorKind};
10use mm1_core::envelope::Envelope;
11use mm1_proto_system::{SpawnErrorKind, StartErrorKind, WatchRef};
12use tokio::sync::oneshot;
13
14use super::TestContext;
15use crate::rt::TaskKey;
16
17#[derive(derive_more::Debug)]
18pub struct Spawn<R> {
19 pub task_key: TaskKey,
20 pub link: bool,
21
22 pub(crate) runnable: R,
23
24 #[debug(skip)]
25 pub(crate) outcome_tx: oneshot::Sender<Result<Address, ErrorOf<SpawnErrorKind>>>,
26}
27
28#[derive(derive_more::Debug)]
29pub struct Start<R> {
30 pub task_key: TaskKey,
31 pub link: bool,
32 pub start_timeout: Duration,
33
34 pub(crate) runnable: R,
35
36 #[debug(skip)]
37 pub(crate) outcome_tx: oneshot::Sender<Result<Address, ErrorOf<StartErrorKind>>>,
38}
39
40#[derive(derive_more::Debug)]
41pub struct Bind<A = NetAddress> {
42 pub task_key: TaskKey,
43 pub args: BindArgs<A>,
44
45 #[debug(skip)]
46 pub(crate) outcome_tx: oneshot::Sender<Result<(), ErrorOf<BindErrorKind>>>,
47}
48
49#[derive(derive_more::Debug)]
50pub struct InitDone {
51 pub task_key: TaskKey,
52 pub address: Address,
53
54 #[debug(skip)]
55 pub(crate) outcome_tx: oneshot::Sender<()>,
56}
57
58#[derive(derive_more::Debug)]
59pub struct Recv {
60 pub task_key: TaskKey,
61
62 #[debug(skip)]
63 pub(crate) outcome_tx: oneshot::Sender<Result<Envelope, ErrorOf<RecvErrorKind>>>,
64}
65
66#[derive(derive_more::Debug)]
67pub struct RecvClose {
68 pub task_key: TaskKey,
69
70 #[debug(skip)]
71 pub(crate) outcome_tx: oneshot::Sender<()>,
72}
73
74#[derive(derive_more::Debug)]
75pub struct Fork<R> {
76 pub task_key: TaskKey,
77
78 #[debug(skip)]
79 pub(crate) outcome_tx: oneshot::Sender<Result<TestContext<R>, ErrorOf<ForkErrorKind>>>,
80}
81
82#[derive(derive_more::Debug)]
83pub struct ForkRun {
84 pub task_key: TaskKey,
85 pub address_lease: Option<AddressLease>,
86
87 #[debug(skip)]
88 pub(crate) task_fut: BoxFuture<'static, ()>,
89
90 #[debug(skip)]
91 pub(crate) outcome_tx: oneshot::Sender<()>,
92}
93
94#[derive(derive_more::Debug)]
95pub struct PendingTask {
96 pub task_key: TaskKey,
97 pub address_lease: Option<AddressLease>,
98 #[debug(skip)]
99 pub(crate) task_fut: BoxFuture<'static, ()>,
100}
101
102#[derive(derive_more::Debug)]
103pub struct Quit {
104 pub task_key: TaskKey,
105 pub result: Result<(), Box<dyn std::error::Error + Send + Sync + 'static>>,
106
107 #[debug(skip)]
108 #[allow(dead_code)]
109 pub(crate) outcome_tx: oneshot::Sender<Never>,
110}
111
112#[derive(derive_more::Debug)]
113pub struct Tell {
114 pub task_key: TaskKey,
115 pub to: Address,
116 pub envelope: Envelope,
117
118 #[debug(skip)]
119 pub(crate) outcome_tx: oneshot::Sender<Result<(), ErrorOf<SendErrorKind>>>,
120}
121
122#[derive(derive_more::Debug)]
123pub struct Watch {
124 pub task_key: TaskKey,
125 pub peer: Address,
126
127 #[debug(skip)]
128 pub(crate) outcome_tx: oneshot::Sender<WatchRef>,
129}
130
131#[derive(derive_more::Debug)]
132pub struct Unwatch {
133 pub task_key: TaskKey,
134 pub watch_ref: WatchRef,
135
136 #[debug(skip)]
137 pub(crate) outcome_tx: oneshot::Sender<()>,
138}
139
140#[derive(derive_more::Debug)]
141pub struct Link {
142 pub task_key: TaskKey,
143
144 pub peer: Address,
145 #[debug(skip)]
146 pub(crate) outcome_tx: oneshot::Sender<()>,
147}
148
149#[derive(derive_more::Debug)]
150pub struct Unlink {
151 pub task_key: TaskKey,
152
153 pub peer: Address,
154 #[debug(skip)]
155 pub(crate) outcome_tx: oneshot::Sender<()>,
156}
157
158#[derive(derive_more::Debug)]
159pub struct SetTrapExit {
160 pub task_key: TaskKey,
161
162 pub enable: bool,
163 #[debug(skip)]
164 pub(crate) outcome_tx: oneshot::Sender<()>,
165}
166
167#[derive(derive_more::Debug)]
168pub struct Exit {
169 pub task_key: TaskKey,
170
171 pub peer: Address,
172 #[debug(skip)]
173 pub(crate) outcome_tx: oneshot::Sender<bool>,
174}
175
176#[derive(derive_more::Debug)]
177pub struct Kill {
178 pub task_key: TaskKey,
179
180 pub peer: Address,
181 #[debug(skip)]
182 pub(crate) outcome_tx: oneshot::Sender<bool>,
183}