thingvellir 0.0.2-alpha1

a concurrent, shared-nothing abstraction that manages an assembly of things
Documentation
use tokio::sync::oneshot;

use super::{DefaultCommitPolicy, InnerCommitPolicy, TakenData};
use crate::{ShardError, ShardStats, UpstreamError};

pub(crate) enum InternalMessage<Key, Data> {
    DataLoadResult(Key, Result<Data, UpstreamError>),
    DataCommitResult(Key, Result<(), UpstreamError>),
    DoExpeditedExpirationProbe,
}

pub(super) enum ServiceHandleMessage<Key, Data> {
    Execute(Key, Box<dyn FnOnce(Result<&Data, ShardError>) + Send>),
    ExecuteIfCached(Key, Box<dyn FnOnce(Option<&Data>) + Send>),
    ExecuteMut(
        Key,
        Box<
            dyn FnOnce(Result<&mut Data, ShardError>, DefaultCommitPolicy) -> InnerCommitPolicy
                + Send,
        >,
    ),
    GetStats(oneshot::Sender<ShardStats>),
    TakeData(Key, TakeDataSender<Key, Data>),
    Stop,
}

pub(super) type TakeDataSender<Key, Data> = oneshot::Sender<Option<TakenData<Key, Data>>>;