use crate::config::RunnableConfig;
use crate::{State, stream::StreamMode};
use futures::future::BoxFuture;
use futures::stream::BoxStream;
use std::pin::Pin;
pub trait PregelProtocol<S: State>: Send + Sync + 'static {
fn invoke(
&self,
input: S,
config: &RunnableConfig,
) -> BoxFuture<'_, Result<S, crate::JunctureError>>;
#[allow(
clippy::type_complexity,
reason = "boxed stream return type requires complex generic"
)]
fn stream(
&self,
input: S,
config: &RunnableConfig,
mode: StreamMode,
) -> BoxFuture<
'_,
Result<
Pin<
Box<
BoxStream<'static, Result<crate::stream::StreamEvent<S>, crate::JunctureError>>,
>,
>,
crate::JunctureError,
>,
>;
fn get_state(
&self,
config: &RunnableConfig,
) -> BoxFuture<'_, Result<Option<crate::checkpoint::StateSnapshot<S>>, crate::JunctureError>>;
fn update_state(
&self,
config: &RunnableConfig,
update: S::Update,
as_node: Option<&str>,
) -> BoxFuture<'_, Result<RunnableConfig, crate::JunctureError>>;
}