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
//! Communication between processes using shared memory.
//!
//! This crate uses memfd sealing to ensure safety between untrusted processes,
//! and therefore, it works only on Linux.
//!
//! You might want to start in the `sharedring` module, which sets up a lock-free ringbuffer
//! between untrusted processes. Another useful function is `mem::write_once` for a scenario where
//! you write data once and make it available for reading afterwards. The `mem` and `ringbuf`
//! contain building blocks that might be useful in other use cases.
//!
//! There is also a client/server example in the `examples` directory that can help you get started.
//! Enjoy!

pub mod mem;

pub mod ringbuf;

pub mod sharedring;

/// Enumeration of errors possible in this library
#[derive(thiserror::Error, Debug)]
pub enum Error {
    #[error("Memfd errors {0:?}")]
    Memfd(#[from] mem::mfd::Error),
    #[error("OS errors {0:?}")]
    Io(#[from] std::io::Error),
    #[error("Ringbuffer errors {0:?}")]
    Ringbuf(#[from] ringbuf::Error),
}