Have you ever found yourself writing essentially the same code twice, once for
[RawFd
] for Posix-ish platforms and once for [RawHandle
] or [RawSocket
]
for Windows platforms? This crate abstracts over those platform differences.
Being non-owning, these handles operate much like raw pointers in Rust. They are considered safe to construct, but unsafe to use in any way that depends on the resource they point to.
This library is meant to be a building block for higher-level libraries, such as the [io-streams] crate.
The central type of this library is [UnsafeHandle
]. On Posix-ish platforms
it just contains a [RawFd
]. On Windows, it contains an enum of either a
RawHandle
(for files and pipes), a RawSocket
(for sockets), or a stdio
handle (for stdin, stdout, stderr), allowing it to abstract over different
types of I/O in a similar manner.
[UnsafeFile
] and [UnsafeSocket
] are similar non-owning types, but which
only contain one type, instead of an enum, which allow them to be used in
contexts that only support one type.
The [crate documentation] has a complete overview and examples.