Skip to main content

reifydb_runtime/context/
mod.rs

1// SPDX-License-Identifier: Apache-2.0
2// Copyright (c) 2026 ReifyDB
3
4pub mod clock;
5pub mod rng;
6pub mod spawner;
7pub mod transaction;
8
9use clock::{Clock, MockClock};
10use rng::Rng;
11use spawner::Spawner;
12
13use crate::version_epoch::VersionEpoch;
14
15#[derive(Clone, Debug)]
16pub struct RuntimeContext {
17	pub clock: Clock,
18	pub rng: Rng,
19	pub version_epoch: VersionEpoch,
20	pub spawner: Spawner,
21}
22
23impl RuntimeContext {
24	pub fn builder(spawner: Spawner) -> RuntimeContextBuilder {
25		RuntimeContextBuilder {
26			clock: Clock::Real,
27			rng: Rng::default(),
28			version_epoch: VersionEpoch::new(),
29			spawner,
30		}
31	}
32
33	pub fn testing(initial_millis: u64, seed: u64) -> Self {
34		Self {
35			clock: Clock::Mock(MockClock::from_millis(initial_millis)),
36			rng: Rng::seeded(seed),
37			version_epoch: VersionEpoch::new(),
38			spawner: Spawner::inline(),
39		}
40	}
41}
42
43#[derive(Debug)]
44pub struct RuntimeContextBuilder {
45	clock: Clock,
46	rng: Rng,
47	version_epoch: VersionEpoch,
48	spawner: Spawner,
49}
50
51impl RuntimeContextBuilder {
52	pub fn clock(mut self, clock: Clock) -> Self {
53		self.clock = clock;
54		self
55	}
56
57	pub fn rng(mut self, rng: Rng) -> Self {
58		self.rng = rng;
59		self
60	}
61
62	pub fn version_epoch(mut self, version_epoch: VersionEpoch) -> Self {
63		self.version_epoch = version_epoch;
64		self
65	}
66
67	pub fn build(self) -> RuntimeContext {
68		RuntimeContext {
69			clock: self.clock,
70			rng: self.rng,
71			version_epoch: self.version_epoch,
72			spawner: self.spawner,
73		}
74	}
75}