101 个不稳定版本

0.51.0 2023年9月30日
0.49.0 2023年3月26日
0.48.0 2022年12月19日
0.47.2 2022年6月18日
0.2.4 2016年12月26日

#280数据结构

Download history 61/week @ 2024-05-01 62/week @ 2024-05-08 204/week @ 2024-05-15 117/week @ 2024-05-22 147/week @ 2024-05-29 44/week @ 2024-06-05 37/week @ 2024-06-12 46/week @ 2024-06-19 20/week @ 2024-06-26 34/week @ 2024-07-03 7/week @ 2024-07-10 97/week @ 2024-07-17 113/week @ 2024-07-24 56/week @ 2024-07-31 89/week @ 2024-08-07 105/week @ 2024-08-14

每月406次下载
用于 2 crates

MIT/Apache

68KB
1.5K SLoC

undo

撤销-重做库。

Rust Crates.io Docs

实现了一个 命令模式,其中所有编辑都是通过创建应用修改的对象来完成的。所有对象都知道如何撤销它们应用的变化,并且通过使用提供的数据结构,可以很容易地撤销和重做对目标所做的编辑。

有关更多信息,请参阅文档示例

示例

use undo::{Edit, Record};

struct Add(char);

impl Edit for Add {
    type Target = String;
    type Output = ();

    fn edit(&mut self, target: &mut String) {
        target.push(self.0);
    }

    fn undo(&mut self, target: &mut String) {
        self.0 = target.pop().unwrap();
    }
}

fn main() {
    let mut target = String::new();
    let mut record = Record::new();

    record.edit(&mut target, Add('a'));
    record.edit(&mut target, Add('b'));
    record.edit(&mut target, Add('c'));
    assert_eq!(target, "abc");

    record.undo(&mut target);
    record.undo(&mut target);
    record.undo(&mut target);
    assert_eq!(target, "");

    record.redo(&mut target);
    record.redo(&mut target);
    record.redo(&mut target);
    assert_eq!(target, "abc");
}

许可协议

根据以下之一许可:

由您选择。

贡献

除非您明确说明,否则根据Apache-2.0许可证定义的您有意提交以包含在工作中的任何贡献,都应如上所述双重许可,而无需任何额外的条款或条件。

依赖关系

~0–9.5MB
~44K SLoC