refs 0.51.0

My vision of reference counting and resources management designed for GUI applications.
Documentation
#![cfg(test)]

use std::ops::DerefMut;

use hreads::set_current_thread_as_main;
use serial_test::serial;

use crate::{
    Own,
    editor::{EditedCallback, Editor},
};

#[derive(Default)]
struct Data {
    number: i32,
}

struct DataHolder {
    data:     Data,
    callback: Box<dyn FnMut(i32)>,
}

impl DataHolder {
    fn data(&mut self) -> Editor<'_, DataHolder, Data> {
        Editor::new(self, &self.data)
    }
}

impl EditedCallback for DataHolder {
    fn edited(&mut self) {
        self.callback.deref_mut()(self.data.number);
    }
}

#[test]
#[serial]
fn test_editor() {
    set_current_thread_as_main();

    let test = Own::new(0);
    let mut test = test.weak();

    assert_eq!(*test, 0);

    let mut data = DataHolder {
        data:     Default::default(),
        callback: Box::new(move |a| {
            *test += a;
        }),
    };

    data.data().number = 10;
    assert_eq!(*test, 10);

    data.data().number = 40;
    assert_eq!(*test, 50);
}