use async_trait::async_trait;
use serde::{Deserialize, Serialize};
use serde_json::{Map, Value};
use crate::core::exceptions::{OpError, OperonError};
use crate::core::ops::base::{BaseOp, OpContext, OpMeta};
use crate::core::states::ref_::RefConfig;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Branch {
pub condition: RefConfig,
pub target: String,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct BranchConfig {
#[serde(default)]
pub cases: Vec<Branch>,
#[serde(default)]
pub default: Option<String>,
}
pub struct BranchOp {
pub meta: OpMeta,
pub branch: BranchConfig,
}
#[async_trait]
impl BaseOp for BranchOp {
fn meta(&self) -> &OpMeta {
&self.meta
}
async fn exec_core(
&self,
_inputs: Map<String, Value>,
_ctx: &OpContext<'_>,
) -> Result<Option<Value>, OperonError> {
Err(OperonError::Op(OpError::Branch(format!(
"BranchOp::exec_core not yet implemented (phase 1 scaffold for {})",
self.meta.full_name
))))
}
}