6 个版本

使用旧 Rust 2015

0.1.6 2021 年 9 月 25 日
0.1.5 2020 年 7 月 31 日
0.1.4 2018 年 8 月 1 日

#364 in Rust 模式

Download history 25067/week @ 2024-02-28 27177/week @ 2024-03-06 26270/week @ 2024-03-13 27573/week @ 2024-03-20 24961/week @ 2024-03-27 26444/week @ 2024-04-03 25564/week @ 2024-04-10 27357/week @ 2024-04-17 26079/week @ 2024-04-24 25857/week @ 2024-05-01 24746/week @ 2024-05-08 25060/week @ 2024-05-15 24462/week @ 2024-05-22 25449/week @ 2024-05-29 27786/week @ 2024-06-05 21763/week @ 2024-06-12

103,446 每月下载量
108 个crate中使用 (16 直接)

MIT/Apache

7KB
142

drop_bomb

Build Status Crates.io API reference

实现线性类型的运行时守卫。有关更多信息,请参阅文档


lib.rs:

drop_bomb

drop_bomb 提供了两种类型,DropBombDebugDropBomb,除非解除,否则在 drop 时会抛出指定信息的恐慌。这对于构建运行时检查的线性类型非常有用。

例如,可以构建一个 BufWriter 的变体,强制在刷新期间处理错误。

extern crate drop_bomb;

use std::io::{Write, BufWriter, Result};
use drop_bomb::DropBomb;

struct CheckedBufWriter<W: Write> {
    inner: BufWriter<W>,
    bomb: DropBomb,
}

impl<W: Write> CheckedBufWriter<W> {
    fn new(inner: BufWriter<W>) -> CheckedBufWriter<W> {
        let bomb = DropBomb::new(
            "CheckedBufWriter must be explicitly closed \
             to handle potential errors on flush"
        );
        CheckedBufWriter { inner, bomb }
    }

    fn close(mut self) -> Result<()> {
        self.bomb.defuse();
        self.inner.flush()?;
        Ok(())
    }
}

注意

  • 如果线程已经处于恐慌状态,炸弹不会做任何事情。
  • #[cfg(debug_assertions)] 被禁用时,DebugDropBomb 总是解除,并且具有零大小。

无运行时依赖