Skip to main content

resolve_effect

Function resolve_effect 

Source
pub fn resolve_effect<F>(cx: &mut Cx, effect: Effect, perform: F) -> Result<Ref>
where F: FnOnce(&mut Cx, &Effect) -> Result<Ref>,
Expand description

Resolve an effect end to end: record the request, enforce capabilities, reuse any cassette result, otherwise run perform, then record the outcome.

ยงExamples

let mut cx = Cx::new(Arc::new(NoopEvalPolicy), Arc::new(DefaultFactory));
let effect = Effect::new(
    effect_tool_call_kind(),
    Ref::Symbol(Symbol::qualified("test", "tool")),
    Ref::Symbol(Symbol::new("input")),
    Ref::Symbol(Symbol::qualified("core", "Any")),
    effect_resume_op_key(),
    effect_abort_op_key(),
);
let result = Ref::Symbol(Symbol::new("ok"));
let got = resolve_effect(&mut cx, effect, {
    let result = result.clone();
    move |_cx, _effect| Ok(result)
})
.unwrap();
assert_eq!(got, result);
assert_eq!(cx.effect_ledger().records().len(), 1);