1use crate::value::Value;
2
3pub const DEFAULT_UNDO_DEPTH: usize = 10;
4
5#[derive(Debug, Clone, Default)]
6pub struct UndoHistory {
7 snapshots: Vec<Vec<Value>>,
8 capacity: usize,
9}
10
11impl UndoHistory {
12 pub fn new() -> Self {
13 Self::with_capacity(DEFAULT_UNDO_DEPTH)
14 }
15
16 pub fn with_capacity(capacity: usize) -> Self {
17 Self {
18 snapshots: Vec::new(),
19 capacity: capacity.max(1),
20 }
21 }
22
23 pub fn push(&mut self, snapshot: Vec<Value>) {
24 if self.snapshots.len() >= self.capacity {
25 self.snapshots.remove(0);
26 }
27 self.snapshots.push(snapshot);
28 }
29
30 pub fn pop(&mut self) -> Option<Vec<Value>> {
31 self.snapshots.pop()
32 }
33}