1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#[derive(Debug, Default)]
pub struct TimeSequenceFactory {
	_extensible: (),
}

impl crate::SequenceFactory for TimeSequenceFactory {
	type Sequence = std::time::SystemTime;
	type Delta = std::time::Duration;

	fn base() -> std::time::SystemTime {
		std::time::UNIX_EPOCH
	}

	fn acquire(&mut self, last: std::time::SystemTime) -> std::time::SystemTime {
		let now = std::time::SystemTime::now();

		if now <= last {
			return last + std::time::Duration::from_nanos(1)
		}

		now
	}

	fn rewind(&self, current: std::time::SystemTime, amount: &std::time::Duration) -> std::time::SystemTime {
		current - *amount
	}
}