use aion_core::Event;
use async_trait::async_trait;
use futures::stream::BoxStream;
use crate::error::ClientError;
#[async_trait]
pub trait WorkflowTransport: Send + Sync {
async fn start_workflow(
&self,
request: aion_proto::ProtoStartWorkflowRequest,
) -> Result<aion_proto::ProtoStartWorkflowResponse, ClientError>;
async fn signal(
&self,
request: aion_proto::ProtoSignalRequest,
) -> Result<aion_proto::ProtoSignalResponse, ClientError>;
async fn query(
&self,
request: aion_proto::ProtoQueryRequest,
) -> Result<aion_proto::ProtoQueryResponse, ClientError>;
async fn cancel(
&self,
request: aion_proto::ProtoCancelRequest,
) -> Result<aion_proto::ProtoCancelResponse, ClientError>;
async fn list_workflows(
&self,
request: aion_proto::ProtoListWorkflowsRequest,
) -> Result<aion_proto::ProtoListWorkflowsResponse, ClientError>;
async fn describe_workflow(
&self,
request: aion_proto::ProtoDescribeWorkflowRequest,
) -> Result<aion_proto::ProtoDescribeWorkflowResponse, ClientError>;
async fn subscribe(
&self,
request: aion_proto::SubscriptionRequest,
resume_from_sequence: Option<u64>,
) -> Result<SubscriptionAttempt, ClientError>;
}
pub struct SubscriptionAttempt {
pub events: BoxStream<'static, Result<Event, ClientError>>,
}
impl SubscriptionAttempt {
#[must_use]
pub fn new(events: BoxStream<'static, Result<Event, ClientError>>) -> Self {
Self { events }
}
}