write_only/
lib.rs

1// This Source Code Form is subject to the terms of the Mozilla Public
2// License, v. 2.0. If a copy of the MPL was not distributed with this
3// file, You can obtain one at https://mozilla.org/MPL/2.0/.
4
5//! References/slices that provide write-access, but no read-access.
6//!
7//! # Examples
8//!
9//! Write-only reference:
10//! ```
11//! use write_only::{prelude::*, Put};
12//!
13//! fn write<T: Put<u8>>(write_only: &mut T) {
14//!     write_only.put(42u8);
15//! }
16//!
17//! let mut value: u8 = 0;
18//!
19//! let mut write_only = WriteOnlyRef::from(&mut value);
20//! write(&mut write_only);
21//!
22//! assert_eq!(value, 42);
23//!```
24//!
25//! Write-only slice:
26//! ```
27//! use write_only::{prelude::*, PutAt};
28//!
29//! fn write<T: PutAt<u8>>(write_only: &mut T) {
30//!     write_only.put_at(2, 42u8);
31//! }
32//!
33//! let mut values: Vec<u8> = (0..10).collect();
34//!
35//! let mut write_only = WriteOnlySlice::from(&mut values[..]);
36//! write(&mut write_only);
37//!
38//! assert_eq!(values[2], 42u8);
39//! ```
40
41#![cfg_attr(not(feature = "std"), no_std)]
42
43mod reference;
44mod slice;
45
46pub use reference::{Put, VolatileWriteOnlyRef, Write, WriteOnlyRef};
47pub use slice::{
48    PutAt, PutFromSliceAt, VolatileWriteOnlySlice, WriteAt, WriteFromSliceAt, WriteOnlySlice,
49};
50
51/// The crate's prelude.
52pub mod prelude {
53    pub use crate::reference::{Put as _, VolatileWriteOnlyRef, Write as _, WriteOnlyRef};
54    pub use crate::slice::{
55        PutAt as _, PutFromSliceAt as _, VolatileWriteOnlySlice, WriteAt as _,
56        WriteFromSliceAt as _, WriteOnlySlice,
57    };
58}