34
src/rpc.rs
34
src/rpc.rs
@@ -9,10 +9,11 @@ use jsonrpsee::{
|
||||
server::{ServerBuilder, ServerHandle},
|
||||
types::error::ErrorObjectOwned,
|
||||
};
|
||||
use serde::{Deserialize, Serialize};
|
||||
use serde::Deserialize;
|
||||
use serde_json::{Value, json};
|
||||
|
||||
use crate::{
|
||||
dag::{DagError, FlowDag, build_flow_dag},
|
||||
models::{Actor, Context, Flow, Job, Message, MessageFormatType, Runner, ScriptType},
|
||||
storage::RedisDriver,
|
||||
time::current_timestamp,
|
||||
@@ -45,6 +46,22 @@ fn storage_err(e: Box<dyn std::error::Error + Send + Sync>) -> ErrorObjectOwned
|
||||
}
|
||||
}
|
||||
|
||||
fn dag_err(e: DagError) -> ErrorObjectOwned {
|
||||
match e {
|
||||
DagError::Storage(inner) => storage_err(inner),
|
||||
DagError::MissingDependency { .. } => ErrorObjectOwned::owned(
|
||||
-32020,
|
||||
"DAG Missing Dependency",
|
||||
Some(Value::String(e.to_string())),
|
||||
),
|
||||
DagError::CycleDetected { .. } => ErrorObjectOwned::owned(
|
||||
-32021,
|
||||
"DAG Cycle Detected",
|
||||
Some(Value::String(e.to_string())),
|
||||
),
|
||||
}
|
||||
}
|
||||
|
||||
// -----------------------------
|
||||
// Create DTOs and Param wrappers
|
||||
// -----------------------------
|
||||
@@ -447,6 +464,21 @@ pub fn build_module(state: Arc<AppState>) -> RpcModule<()> {
|
||||
})
|
||||
.expect("register flow.load");
|
||||
}
|
||||
{
|
||||
let state = state.clone();
|
||||
module
|
||||
.register_async_method("flow.dag", move |params, _caller, _ctx| {
|
||||
let state = state.clone();
|
||||
async move {
|
||||
let p: FlowLoadParams = params.parse().map_err(invalid_params_err)?;
|
||||
let dag: FlowDag = build_flow_dag(&state.redis, p.context_id, p.id)
|
||||
.await
|
||||
.map_err(dag_err)?;
|
||||
Ok::<_, ErrorObjectOwned>(dag)
|
||||
}
|
||||
})
|
||||
.expect("register flow.dag");
|
||||
}
|
||||
|
||||
// Job
|
||||
{
|
||||
|
Reference in New Issue
Block a user