5 个不稳定版本

0.3.1 2020年8月24日
0.3.0 2020年8月24日
0.2.1 2020年8月11日
0.2.0 2020年8月11日
0.1.0 2019年11月30日

#3 in #destroy

MIT 许可证

6KB
62 行(不含注释)

必须销毁

必须销毁用于创建一个必须显式调用的类型的参数化析构函数。

MustDestroy<T, Args> 作为一个封装类型的守卫,该类型实现了 Destroy 特性,如果守卫被丢弃,则会引发 panic

然而,在守卫上调用销毁,将会在封装的子对象上调用销毁,并且将被安全地消耗。

use must_destroy::{MustDestroy, Destroy};
    struct MyDestroyableItem;

    impl Destroy<(&'_ str, i32)> for MyDestroyableItem {
        fn destroy(self, args: (&str, i32)) {
            
            // Do things to destroy item...

            // Just to show our arguments got through fine
            assert_eq!("Test String", args.0);
            assert_eq!(12, args.1);
        }
    }

    fn main() {
        let destroy_me = MustDestroy::new(MyDestroyableItem);

        // Dropping the item here would cause a panic at runtime
        // drop(destroy_me)

        // However calling destroy will consume the item, and not cause
        // a panic.
        
        // We currently have to pass the arguments as a tuple.
        //
        // I'd like to be able to hide the need to do this though.
        destroy_me.destroy(("Test String", 12));
    }

无运行时依赖