transactional 0.3.1

A simple optimistic lock-free confirmation-based transactional model for Rust.
Documentation
//! # Transactional
//!
//! A lightweight, lock-free library for managing transactional state in Rust.
//!
//! ## Overview
//!
//! This library provides a way to manage state changes in a transactional manner,
//! allowing for commit or rollback operations.
//!
//! ## Features
//!
//! - For synchronous, non-concurrent use
//! - Lightweight, clone-free, lock-free, and extremely fast
//! - Simple API for managing transactional state
//!
//! ## Examples
//!
//! Basic usage:
//!
//! ```rust
//! use transactional::prelude::*;
//!
//! // Create a new transactional state
//! let mut state = State::new(42);
//!
//! // Start a transaction and commit unconditionally
//! let transaction = state.transact(Some(100)).commit();
//!
//! assert_eq!(state.get(), Some(&100));
//! ```
//!
//! Using validation with `commit_if_ok`:
//!
//! ```rust
//! use transactional::prelude::*;
//!
//! let mut state = State::new(10);
//!
//! // Define a validation function
//! let validate = |prev: Option<&i32>, curr: Option<&i32>| -> Result<(), UserError> {
//!     match (prev, curr) {
//!         (Some(p), Some(c)) if *c > *p => Ok(()),
//!         _ => Err("Value must increase".into()),
//!     }
//! };
//!
//! // This will succeed because 20 > 10
//! let result = state.transact(Some(20)).commit_if_ok(validate);
//! assert!(result.is_ok());
//!
//! // This would fail because 5 < 20
//! let result = state.transact(Some(5)).commit_if_ok(validate);
//! assert!(result.is_err());
//!
//! // This will bypass checks
//! state.transact(Some(3)).commit();
//! assert_eq!(state.get(), Some(&3));
//! ```
//!

pub mod error;
pub mod prelude;
pub mod state;
pub(crate) mod thread;
pub mod transaction;