Skip to main content

Crate flow_ir_core

Crate flow_ir_core 

Source
Expand description

flow.ir Pure Rust schema + sync interpreter.

3 Node kinds (Step / Seq / Branch) + Fanout / Loop / Try + 3 Expr ops (Path / Lit / Eq) + sync eval + Dispatcher trait + Path read/write.

mlua / futures / async 依存ゼロ。 async runtime + mlua binding は上流 mlua-flow-ir crate が担当する 4 層 stack の core 層。

§Quick start

use flow_ir_core::{eval, Dispatcher, EvalError, Expr, Node};
use serde_json::{json, Value};

let node: Node = serde_json::from_value(json!({
    "kind": "step",
    "ref": "uppercase",
    "in": { "op": "path", "at": "$.input" },
    "out": { "op": "path", "at": "$.output" },
})).unwrap();

struct Fixture;
impl Dispatcher for Fixture {
    fn dispatch(&self, _r: &str, input: Value) -> Result<Value, EvalError> {
        if let Value::String(s) = input {
            Ok(Value::String(s.to_uppercase()))
        } else {
            Ok(input)
        }
    }
}

let out = eval(&node, json!({ "input": "hello" }), &Fixture).unwrap();
assert_eq!(out, json!({ "input": "hello", "output": "HELLO" }));

Structs§

MemoryCtx
Default CtxStorage impl — Arc<Mutex<Value>> wrapper。

Enums§

EvalError
Evaluation error.
Expr
flow.ir Expr op.
JoinMode
Fanout join semantics (Promise / futures combinators).
Node
flow.ir Node kind.

Traits§

CtxStorage
Ctx backend trait — eval(_with_storage) 系が ctx state を touch する 唯一の経路。 &self write (interior mutability) で 走行中の Flow と 外部 task が同じ ctx を共有 できる (= dispatch().await suspend 中に外部 task が ctx.write で State 注入 → resume 後 Step が read で観測、 という dynamic injection 経路を成立させる)。
Dispatcher
Dispatcher callback: resolves a Step.ref against the provided input, returns the step’s raw output value.

Functions§

eval
Legacy Value-passing sync evaluator — backward compat wrapper around eval_with_storage + MemoryCtx. Value を所有権で受け取り、 内部で MemoryCtx::new(ctx) を使って storage 版に委譲、 終了後の snapshot を返す。
eval_expr
Evaluate an Expr against a context value, returning the resolved JSON value.
eval_with_storage
Storage-backed sync evaluator — CtxStorage 経由で ctx を touch する正本。
is_truthy
JSON value の truthy 判定 (= flow.ir Branch cond / Loop cond で使う)。 Bool は値そのまま、 null/false 以外は truthy (Lua / JS と整合)。
read_path
Read a path from a JSON value. Supports simple $.a.b.c form.
write_path
Write a value at the path location inside ctx, returning the updated ctx. out must be a Path Expr.