pub fn resolve_effect<F>(cx: &mut Cx, effect: Effect, perform: F) -> 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);