reifydb_transaction/single/
mod.rs

1// Copyright (c) reifydb.com 2025
2// This file is licensed under the AGPL-3.0-or-later, see license.md file
3
4mod svl;
5
6use reifydb_core::{
7	event::EventBus,
8	interface::{SingleVersionTransaction, WithEventBus},
9};
10use reifydb_store_transaction::TransactionStore;
11pub use svl::{SvlCommandTransaction, SvlQueryTransaction, TransactionSvl};
12
13#[repr(u8)]
14#[derive(Clone)]
15pub enum TransactionSingleVersion {
16	SingleVersionLock(TransactionSvl) = 0,
17}
18
19impl TransactionSingleVersion {
20	pub fn svl(store: TransactionStore, bus: EventBus) -> Self {
21		Self::SingleVersionLock(TransactionSvl::new(store, bus))
22	}
23}
24
25impl TransactionSingleVersion {
26	pub fn testing() -> Self {
27		Self::SingleVersionLock(TransactionSvl::new(TransactionStore::testing_memory(), EventBus::default()))
28	}
29}
30
31impl WithEventBus for TransactionSingleVersion {
32	fn event_bus(&self) -> &EventBus {
33		match self {
34			TransactionSingleVersion::SingleVersionLock(t) => t.event_bus(),
35		}
36	}
37}
38
39impl SingleVersionTransaction for TransactionSingleVersion {
40	type Query<'a> = SvlQueryTransaction<'a>;
41	type Command<'a> = SvlCommandTransaction<'a>;
42
43	#[inline]
44	fn begin_query(&self) -> reifydb_core::Result<Self::Query<'_>> {
45		match self {
46			TransactionSingleVersion::SingleVersionLock(t) => t.begin_query(),
47		}
48	}
49
50	#[inline]
51	fn begin_command(&self) -> reifydb_core::Result<Self::Command<'_>> {
52		match self {
53			TransactionSingleVersion::SingleVersionLock(t) => t.begin_command(),
54		}
55	}
56}