`ChildStdin`, et cetera should implement `AsRawFd/AsRawHandle`
notgull opened this issue · comments
John Nunley commented
I was going to try to implement I/O safety types on the handles as per sunfishcode/io-lifetimes#38, but then I realized that ChildStdin
, ChildStdout
and ChildStderr
don't implement AsRawFd
at all.
I believe that this is due to the fact that Unblock
is used to wrap the inner std
type, which makes it difficult to access the methods of the inner type. I see three possible ways to resolve this:
- On Windows, wrap
ChildStd*
in anArc
that is stored in the structure as well as theUnblock
, so that methods on the inner type can be accessed more easily. - Make it easier to access the inner file descriptor for
Unblock
types. We could potentially implementAsRawHandle
onUnblock<T: AsRawHandle>
that panics if the inner type is not accessible, or maybe some kind ofget_ref(&self) -> Option<&T>
general purpose method. - Implement
AsRawFd
onunix
, since it is easy to get the inner type viaasync_io::Async
, but don't implement the corresponding types on Windows.
Taiki Endo commented
At this time, I tend to prefer the third (unix only). (Eventually, we probably need to implement them on windows, but there is no need to rush...)