refs 0.51.0

My vision of reference counting and resources management designed for GUI applications.
Documentation
use std::{
    marker::PhantomData,
    ops::{Deref, DerefMut},
};

use crate::{Rglica, editor::EditedCallback};

pub struct Editor<'a, Obj: EditedCallback, Field> {
    obj:       Rglica<Obj>,
    field:     Rglica<Field>,
    _lifetime: PhantomData<&'a Obj>,
}

impl<'a, Obj: EditedCallback, Field> Editor<'a, Obj, Field> {
    pub fn new(obj: &'a Obj, field: &'a Field) -> Self {
        Self {
            obj:       Rglica::from_ref(obj),
            field:     Rglica::from_ref(field),
            _lifetime: PhantomData,
        }
    }
}

impl<Obj: EditedCallback, Field> Deref for Editor<'_, Obj, Field> {
    type Target = Field;
    fn deref(&self) -> &Self::Target {
        self.field.deref()
    }
}

impl<Obj: EditedCallback, Field> DerefMut for Editor<'_, Obj, Field> {
    fn deref_mut(&mut self) -> &mut Self::Target {
        self.field.deref_mut()
    }
}

impl<Obj: EditedCallback, Field> Drop for Editor<'_, Obj, Field> {
    fn drop(&mut self) {
        self.obj.edited();
    }
}