stak_time/
primitive_set.rs1mod error;
2mod primitive;
3
4pub use self::{error::PrimitiveError, primitive::Primitive};
5use crate::Clock;
6use stak_vm::{Error, Memory, Number, PrimitiveSet};
7
8pub struct TimePrimitiveSet<T: Clock> {
10 clock: T,
11}
12
13impl<T: Clock> TimePrimitiveSet<T> {
14 pub const fn new(clock: T) -> Self {
16 Self { clock }
17 }
18}
19
20impl<T: Clock> PrimitiveSet for TimePrimitiveSet<T> {
21 type Error = PrimitiveError;
22
23 fn operate(&mut self, memory: &mut Memory, primitive: usize) -> Result<(), Self::Error> {
24 match primitive {
25 Primitive::CURRENT_JIFFY => {
26 memory.push(
27 Number::from_i64(
28 self.clock
29 .current_jiffy()
30 .map_err(|_| PrimitiveError::CurrentJiffy)?
31 as _,
32 )
33 .into(),
34 )?;
35 }
36 _ => return Err(Error::IllegalPrimitive.into()),
37 }
38
39 Ok(())
40 }
41}