relative 0.1.2

A type to wrap `&'static` references such that they can be safely sent between other processes running the same binary.
Documentation

relative

Crates.io Apache-2.0 licensed Build Status Build Status Build Status

Docs

A type to wrap &'static references such that they can be safely sent between other processes running the same binary.

References are adjusted relative to a base when (de)serialised, which is what enables it to work across binaries that are dynamically loaded at different addresses under multiple invocations.

It being the same binary is checked by serialising the build_id alongside the relative pointer, which is validated at deserialisation.

Example

Local process

let x: &'static [u16;4] = &[2,3,5,8];
// unsafe as it's up to the user to ensure the reference is into static memory
let relative = unsafe{Data::from(x)};
// send `relative` to remote...

Remote process

// receive `relative`
println!("{:?}", relative.to());
// prints "[2, 3, 5, 8]"

Note

This currently requires Rust nightly.

License

Licensed under Apache License, Version 2.0, (LICENSE.txt or http://www.apache.org/licenses/LICENSE-2.0).

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be licensed as above, without any additional terms or conditions.