reifydb_runtime/context/
mod.rs1pub 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}