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
//! #### A simple no-std/no-alloc I/O and parsing crate
//!
//! The main two traits for parsing are [`Read`] and [`Write`], implemented by
//! [`Reader`], which reads from a fixed-size [`slice`] of bytes, and
//! [`Writer`], which writes to a fixed-size [`slice`] of bytes. The [`Read`]
//! and [`Write`] traits are designed to be extended with extension traits,
//! using [`traitful::extend#extend-a-trait`].
//!
//! Extension traits for big-endian an little-endian parsing are provided in
//! this crate as well; [`be::Read`], [`be::Write`], [`le::Read`],
//! [`le::Write`]. When importing a `Read` or `Write` extension trait, using
//! `as _` will avoid namespace conflicts.
//!
//! # Synchronous and Asynchronous
//!
//! The [`Read`] and [`Write`] traits are synchronous by design. This makes it
//! simple to read and write on in-memory data without touching I/O. For I/O
//! bound reading and writing, there are the [`io::Source`] and
//! [`io::Destination`] traits which work by buffering the bytes to be sent on
//! an [`io::Sender`] or received on an [`io::Receiver`].
//!
//! # Features
//!
//! Some non-default features can enable unstable (no API stability guarantees)
//! functionality.
//!
//! - __*`unstable-io`*__: Bumps MSRV to 1.84, enables the [`io`] module
//! - __*`unstable-error`*__: Bumps MSRV to 1.81, implements [`Error`] for
//! error types
//!
//! [`Error`]: core::error::Error
pub use ;