drop-box 0.1.0

A smart pointer that allows you to automatically run a callback when a value is dropped.
Documentation
use std::ops::{Deref, DerefMut};

pub struct DropBox<T, F>
where
    F: Fn(&mut T),
{
    item: T,
    f: F,
}

impl<T, F> DropBox<T, F>
where
    F: Fn(&mut T),
{
    pub fn new(item: T, f: F) -> Self
where {
        Self { item, f }
    }
}

impl<T, F> Deref for DropBox<T, F>
where
    F: Fn(&mut T),
{
    type Target = T;

    fn deref(&self) -> &Self::Target {
        &self.item
    }
}

impl<T, F> DerefMut for DropBox<T, F>
where
    F: Fn(&mut T),
{
    fn deref_mut(&mut self) -> &mut Self::Target {
        &mut self.item
    }
}

impl<T, F> Drop for DropBox<T, F>
where
    F: Fn(&mut T),
{
    fn drop(&mut self) {
        (self.f)(&mut self.item);
    }
}