1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
//! # Generator-shape coroutine driver
//!
//! Mirrors the shape of `core::ops::Coroutine`: a `Yield` associated type for
//! intermediate progress, a `Return` associated type for terminal output, and a
//! two-variant [`M2dirCoroutineState`] (`Yielded` / `Complete`).
//!
//! io-m2dir is filesystem-flavoured, so every coroutine in the crate picks the
//! standard [`M2dirYield`] directly: it gathers every filesystem (and
//! environmental) primitive the crate emits, namely directory create / remove /
//! read, file create / read / exists / remove, path rename, and the process id
//! / random bytes inputs needed to mint m2dir entry identifiers.
//!
//! [`M2dirClient::run`] drives any standard-Yield coroutine to completion
//! against the local filesystem.
//!
//! [`M2dirClient::run`]: crate::client::M2dirClient::run
use ;
use crateM2dirPath;
/// State yielded by an [`M2dirCoroutine::resume`] step.
///
/// Two-variant by design (matches std's `core::ops::CoroutineState`): any
/// further variation lives inside the per-coroutine `Yield` type.
/// Standard-shape m2dir coroutine.
///
/// Implementors own their internal state machine and declare their per-step
/// `Yield` plus a terminal `Return`. The driver reacts to each `Yield` variant
/// and resumes until `Complete`.
/// Standard filesystem-only Yield. Every io-m2dir coroutine picks `type Yield =
/// M2dirYield`.
///
/// Each variant is paired with the matching [`M2dirArg`] variant the driver
/// feeds back on the next `resume`.
/// Reply fed back into [`M2dirCoroutine::resume`] by the driver.
///
/// Each variant matches the corresponding [`M2dirYield`] request and carries
/// the value the driver gathered while servicing it.