use crate::data_converters::{RawValue, TemporalDeserializable, TemporalSerializable};
pub trait WorkflowDefinition {
type Input: TemporalDeserializable + TemporalSerializable + 'static;
type Output: TemporalDeserializable + TemporalSerializable + 'static;
fn name(&self) -> &str;
}
pub trait HasWorkflowDefinition: WorkflowDefinition {
type Run: WorkflowDefinition;
}
pub struct UntypedWorkflow {
name: String,
}
impl UntypedWorkflow {
pub fn new(name: impl Into<String>) -> Self {
Self { name: name.into() }
}
}
impl WorkflowDefinition for UntypedWorkflow {
type Input = RawValue;
type Output = RawValue;
fn name(&self) -> &str {
&self.name
}
}
impl HasWorkflowDefinition for UntypedWorkflow {
type Run = Self;
}
pub trait QueryDefinition {
type Workflow: WorkflowDefinition;
type Input: TemporalDeserializable + TemporalSerializable + 'static;
type Output: TemporalDeserializable + TemporalSerializable + 'static;
fn name(&self) -> &str;
}
pub trait SignalDefinition {
type Workflow: WorkflowDefinition;
type Input: TemporalDeserializable + TemporalSerializable + 'static;
fn name(&self) -> &str;
}
pub trait UpdateDefinition {
type Workflow: WorkflowDefinition;
type Input: TemporalDeserializable + TemporalSerializable + 'static;
type Output: TemporalDeserializable + TemporalSerializable + 'static;
fn name(&self) -> &str;
}