1 | //! # embedded-storage - A Storage Abstraction Layer for Embedded Systems |
2 | //! |
3 | //! Storage traits to allow on and off board storage devices to read and write |
4 | //! data. |
5 | |
6 | #![doc (html_root_url = "https://docs.rs/embedded-storage/0.1.0" )] |
7 | #![no_std ] |
8 | #![deny (missing_docs)] |
9 | #![deny (unsafe_code)] |
10 | |
11 | /// Currently contains [`OverlapIterator`] |
12 | pub mod iter; |
13 | /// Technology specific traits for NOR Flashes |
14 | pub mod nor_flash; |
15 | |
16 | /// A region denotes a contiguous piece of memory between two addresses. |
17 | pub trait Region { |
18 | /// Check if `address` is contained in the region of `Self` |
19 | fn contains(&self, address: u32) -> bool; |
20 | } |
21 | |
22 | /// Transparent read only storage trait |
23 | pub trait ReadStorage { |
24 | /// An enumeration of storage errors |
25 | type Error; |
26 | |
27 | /// Read a slice of data from the storage peripheral, starting the read |
28 | /// operation at the given address offset, and reading `bytes.len()` bytes. |
29 | /// |
30 | /// This should throw an error in case `bytes.len()` will be larger than |
31 | /// `self.capacity() - offset`. |
32 | fn read(&mut self, offset: u32, bytes: &mut [u8]) -> Result<(), Self::Error>; |
33 | |
34 | /// The capacity of the storage peripheral in bytes. |
35 | fn capacity(&self) -> usize; |
36 | } |
37 | |
38 | /// Transparent read/write storage trait |
39 | pub trait Storage: ReadStorage { |
40 | /// Write a slice of data to the storage peripheral, starting the write |
41 | /// operation at the given address offset (between 0 and `self.capacity()`). |
42 | /// |
43 | /// **NOTE:** |
44 | /// This function will automatically erase any pages necessary to write the given data, |
45 | /// and might as such do RMW operations at an undesirable performance impact. |
46 | fn write(&mut self, offset: u32, bytes: &[u8]) -> Result<(), Self::Error>; |
47 | } |
48 | |