mut_static 1.0.1

Provides a struct to help create mutable statics with lazy_static.
Documentation

mut_static

Provides a struct to help create mutable statics with lazy_static.

(crates.io)

Quickstart

To create a mutable static simply put your lazy_static object inside of a MutStatic:

use mut_static::MutStatic;
use std::mem;

// Declaring a MutStatic
lazy_static! {
    pub static ref MY_OBJECT: MutStatic<MyObject> = {
        MutStatic::new()
    };
}

// Declaring a MutStatic which already has data
lazy_static! {
    pub static ref MY_OBJECT: MutStatic<MyObject> = {
        MutStatic::new_with_contents(MyObject::new())
    };
}

fn main() {
    // Setting a MutStatic
    MY_OBJECT.set(MyObject::new()).unwrap();

    // Using a MutStatic
    {
        let my_object = MY_OBJECT.read().unwrap();
        let my_object = my_object.deref();
        my_object.use();
    }

    // Using a MutStatic mutably
    {
        let mut my_object = MY_OBJECT.write().unwrap();
        let mut my_object = my_object.deref_mut();
        my_object.use_mut();

        // Resetting a MutStatic
        mem::replace(my_object, MyObject::new());
    }
}