defmodule CounterInterpreter do @behaviour BeamWeaver.Sandbox.Interpreter @impl true def open(_opts), do: {:ok, %{counter: 0}} @impl true def eval(state, "inc", _opts) do state = update_in(state.counter, &(&1 + 1)) {:ok, state.counter, state} end def eval(state, "get", _opts), do: {:ok, state.counter, state} @impl true def snapshot(state, _opts), do: {:ok, state, %{runtime: "counter"}} @impl true def restore(snapshot, _opts), do: {:ok, snapshot} @impl true def close(_state, _opts), do: :ok end alias BeamWeaver.Sandbox.Interpreter.Session {:ok, session} = Session.start( adapter: CounterInterpreter, timeout: 1_000, max_snapshot_bytes: 10_000 ) {:ok, 1} = Session.eval(session, "inc") {:ok, snapshot} = Session.snapshot(session) {:ok, 2} = Session.eval(session, "inc") {:ok, restored} = Session.start(adapter: CounterInterpreter) :ok = Session.restore(restored, snapshot) {:ok, 1} = Session.eval(restored, "get") Session.close(session) Session.close(restored) IO.inspect(snapshot, label: "checkpoint-safe snapshot")