[][src]Trait spartan_lib::core::db::StatusAwareDatabase

pub trait StatusAwareDatabase<M>: Database<M> {
    type RequeueKey: Copy;
    pub fn reserve(&mut self, position: Self::PositionKey) -> Option<&mut M>;
pub fn requeue<F>(
        &mut self,
        position: Self::RequeueKey,
        predicate: F
    ) -> Option<&mut M>
    where
        F: Fn(&M) -> bool
; }

Interface for working with databases, that support status interaction

Associated Types

type RequeueKey: Copy[src]

Loading content...

Required methods

pub fn reserve(&mut self, position: Self::PositionKey) -> Option<&mut M>[src]

Reserve message in database

Removes message from tree in TreeDatabase, does nothing in VecDatabase

use spartan_lib::core::db::{Database, StatusAwareDatabase};
use spartan_lib::core::db::TreeDatabase;
use spartan_lib::core::message::builder::MessageBuilder;
use spartan_lib::core::payload::{Dispatchable, Status};

let mut db = TreeDatabase::default();
let message = MessageBuilder::default().body("Hello, world").compose().unwrap();

db.push_raw(message);

let position = db.position(|msg| msg.reservable()).unwrap();

// reserve returns mutable reference to message, so we can call reserve on message too.
let message = db.reserve(position).unwrap();
message.reserve();

pub fn requeue<F>(
    &mut self,
    position: Self::RequeueKey,
    predicate: F
) -> Option<&mut M> where
    F: Fn(&M) -> bool
[src]

Requeue message back to database

Returns message back to tree in TreeDatabase, does nothing in VecDatabase

use spartan_lib::core::db::{Database, StatusAwareDatabase};
use spartan_lib::core::db::TreeDatabase;
use spartan_lib::core::message::builder::MessageBuilder;
use spartan_lib::core::payload::{Dispatchable, Status, Identifiable};

let mut db = TreeDatabase::default();
let message = MessageBuilder::default().body("Hello, world").compose().unwrap();

db.push_raw(message);

let position = db.position(|msg| msg.reservable()).unwrap();

let message = db.reserve(position).unwrap();
message.reserve();

let id = message.id();

// requeue tries to find a message with provided id, and checks it for predicate
let message = db.requeue(id, |msg| msg.requeueable()).unwrap();
message.requeue();
Loading content...

Implementors

impl<M> StatusAwareDatabase<M> for TreeDatabase<M> where
    M: Identifiable + Sortable + Status,
    <M as Identifiable>::Id: Hash
[src]

type RequeueKey = <M as Identifiable>::Id

impl<M> StatusAwareDatabase<M> for VecDatabase<M> where
    M: Identifiable
[src]

type RequeueKey = <M as Identifiable>::Id

Loading content...