Trait structsy::StructsyTx

source ·
pub trait StructsyTx: Sytx + Sized {
    // Required methods
    fn commit(self) -> SRes<()>;
    fn prepare_commit(self) -> SRes<Prepared>;

    // Provided methods
    fn insert<T: Persistent>(&mut self, sct: &T) -> SRes<Ref<T>> { ... }
    fn update<T: Persistent>(&mut self, sref: &Ref<T>, sct: &T) -> SRes<()> { ... }
    fn delete<T: Persistent>(&mut self, sref: &Ref<T>) -> SRes<()> { ... }
    fn read<T: Persistent>(&mut self, sref: &Ref<T>) -> SRes<Option<T>> { ... }
    fn scan<T: Persistent>(&mut self) -> SRes<TxRecordIter<'_, T>> { ... }
}
Expand description

Transaction behaviour trait.

Required Methods§

source

fn commit(self) -> SRes<()>

Commit a transaction

Example
use structsy::{Structsy,StructsyTx};
let stry = Structsy::open("path/to/file.stry")?;
//....
let mut tx = stry.begin()?;
// ... operate on tx.
tx.commit()?;
source

fn prepare_commit(self) -> SRes<Prepared>

Prepare Commit a transaction

Example
use structsy::{Structsy,StructsyTx};
let stry = Structsy::open("path/to/file.stry")?;
//....
let mut tx = stry.begin()?;
// ... operate on tx.
let prepared = tx.prepare_commit()?;
prepared.commit()?;

Provided Methods§

source

fn insert<T: Persistent>(&mut self, sct: &T) -> SRes<Ref<T>>

Persist a new struct instance.

Example
use structsy::{Structsy,StructsyTx};
use structsy_derive::Persistent;
#[derive(Persistent)]
struct Example {
    value:u8,
}
//.. open structsy etc.
let mut tx = structsy.begin()?;
tx.insert(&Example{value:10})?;
tx.commit()?;
source

fn update<T: Persistent>(&mut self, sref: &Ref<T>, sct: &T) -> SRes<()>

Update a persistent instance with a new value.

Example
use structsy::{Structsy,StructsyTx};
use structsy_derive::Persistent;
#[derive(Persistent)]
struct Example {
    value:u8,
}
//.. open structsy etc.
let mut tx = structsy.begin()?;
let id = tx.insert(&Example{value:10})?;
tx.update(&id, &Example{value:20})?;
tx.commit()?;
source

fn delete<T: Persistent>(&mut self, sref: &Ref<T>) -> SRes<()>

Delete a persistent instance.

Example
use structsy::{Structsy,StructsyTx};
use structsy_derive::Persistent;
#[derive(Persistent)]
struct Example {
    value:u8,
}
//.. open structsy etc.
let mut tx = structsy.begin()?;
let id = tx.insert(&Example{value:10})?;
tx.delete(&id)?;
tx.commit()?;
source

fn read<T: Persistent>(&mut self, sref: &Ref<T>) -> SRes<Option<T>>

Read a persistent instance considering changes in transaction.

Example
use structsy::{Structsy,StructsyTx};
use structsy_derive::Persistent;
#[derive(Persistent)]
struct Example {
    value:u8,
}
//.. open structsy etc.
let mut tx = structsy.begin()?;
let id = tx.insert(&Example{value:10})?;
let read = tx.read(&id)?;
assert_eq!(10,read.unwrap().value);
tx.commit()?;
source

fn scan<T: Persistent>(&mut self) -> SRes<TxRecordIter<'_, T>>

Scan persistent instances of a struct considering changes in transaction.

Example
use structsy::{Structsy,StructsyTx};
use structsy_derive::Persistent;
#[derive(Persistent)]
struct Example {
    value:u8,
}
//.. open structsy etc.
let mut tx = structsy.begin()?;
for (id, inst) in tx.scan::<Example>()? {
    // logic
}
tx.commit()?;

Implementors§