use std::future::Future;
use crate::context::Context;
use crate::error::Result;
use crate::info::Info;
use crate::types::DurableKind;
pub enum ExecutionEnv<'a> {
Function(&'a Info),
Workflow(&'a Context),
}
impl<'a> ExecutionEnv<'a> {
pub fn into_context(self) -> &'a Context {
match self {
ExecutionEnv::Workflow(ctx) => ctx,
ExecutionEnv::Function(_) => {
panic!("expected Workflow ExecutionEnv, got Function")
}
}
}
pub fn into_info(self) -> &'a Info {
match self {
ExecutionEnv::Function(info) => info,
ExecutionEnv::Workflow(_) => {
panic!("expected Function ExecutionEnv, got Workflow")
}
}
}
}
pub trait Durable<Args, T>: Send + Sync + 'static {
const NAME: &'static str;
const KIND: DurableKind;
fn execute(&self, env: ExecutionEnv<'_>, args: Args) -> impl Future<Output = Result<T>> + Send;
}