#static #lazy-static #mut

mut_static

Provides a struct to help create mutable statics with lazy_static

7 releases (major breaking)

Uses old Rust 2015

5.0.0 May 13, 2017
4.0.0 Feb 10, 2017
3.0.0 Jan 2, 2017
2.0.0 Dec 31, 2016
0.1.0 Dec 19, 2016

#8 in #lazy-static

Download history 225/week @ 2024-11-16 234/week @ 2024-11-23 215/week @ 2024-11-30 378/week @ 2024-12-07 211/week @ 2024-12-14 134/week @ 2024-12-21 109/week @ 2024-12-28 166/week @ 2025-01-04 193/week @ 2025-01-11 253/week @ 2025-01-18 163/week @ 2025-01-25 1237/week @ 2025-02-01 1359/week @ 2025-02-08 1251/week @ 2025-02-15 912/week @ 2025-02-22 953/week @ 2025-03-01

4,511 downloads per month
Used in 28 crates (13 directly)

MIT license

10KB
224 lines

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;
use std::ops::DerefMut;

pub struct MyStruct { value: usize }

impl MyStruct {
    pub fn new(value: usize) -> Self {
        MyStruct{ value: value }
    }

    pub fn get_value(&self) -> usize {
        self.value
    }

    pub fn set_value(&mut self, value: usize) {
        self.value = value
    }
}

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

// Declaring a MutStatic which already has data
lazy_static! {
    pub static ref MY_STRUCT_PRESET: MutStatic<MyStruct> = {
        MutStatic::from(MyStruct::new(0))
    };
}

fn main() {
    // Setting a MutStatic
    MY_STRUCT.set(MyStruct::new(0)).unwrap();

    // Using a MutStatic
    {
        let my_struct = MY_STRUCT.read().unwrap();
        assert!(my_struct.get_value() == 0);
    }

    // Using a MutStatic mutably
    {
        let mut my_struct = MY_STRUCT.write().unwrap();
        my_struct.set_value(1);
        assert!(my_struct.get_value() == 1);
    }

    // Resetting a MutStatic
    {
        let mut my_struct = MY_STRUCT.write().unwrap();
        mem::replace(my_struct.deref_mut(), MyStruct::new(2));
        assert!(my_struct.get_value() == 2);
    }
}

Dependencies

~71KB