thingvellir 0.0.14

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

use super::types::{ExecuteFn, ExecuteIfCachedFn, ExecuteMutFn};
use super::{DefaultCommitPolicy, InnerCommitPolicy, TakenData};
use crate::{ShardError, ShardShutdownStats, ShardStats, UpstreamError};

pub(crate) enum InternalMpscMessage {
    DoExpeditedExpirationProbe,
}

#[derive(Debug)]
pub(crate) enum InternalJoinSetResult<Key, Data> {
    DataLoadResult(Key, Result<Data, UpstreamError>),
    DataCommitResult(Key, Result<(), UpstreamError>),
}

pub(super) enum ServiceHandleMessage<Key, Data> {
    Execute(Key, ExecuteFn<Data>),
    ExecuteIfCached(Key, ExecuteIfCachedFn<Data>),
    ExecuteMut(Key, ExecuteMutFn<Data>),
    GetStats(oneshot::Sender<ShardStats>),
    TakeData(Key, TakeDataSender<Key, Data>),
    Shutdown(ShutdownSender),
}

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