Lines 100.00% 7 / 7
Methods 100.00% 2 / 2
Classes 100.00% 1 / 1
Name Lines Methods CRAP
 __construct 100.00% 1 / 1 100.00% 1 / 1 1
 answerRequest 100.00% 6 / 6 100.00% 1 / 1 7
23final readonly class ControlRequestDispatcher
24{
25    public function __construct(
26        private SnapshotSource $snapshots,
27        private RuntimeAdmin $admin,
28    ) {}
29
30    /** @throws StewartException */
31    public function answerRequest(ClientFrame $request): ServerFrame
32    {
33        return match (true) {
34            $request instanceof SnapshotRequest => new SnapshotFrame($this->snapshots->takeSnapshot()),
35            $request instanceof PauseAppRequest => $this->admin->pauseApp(new AppId($request->appId), AppPauseSource::Control),
36            $request instanceof ResumeAppRequest => $this->admin->resumeApp(new AppId($request->appId), AppPauseSource::Control),
37            $request instanceof ResetAppRequest => $this->admin->resetApp(new AppId($request->appId), AppPauseSource::Control),
38            $request instanceof RestartWorkerRequest => $this->admin->restartWorker($request->workerId),
39            default => throw ControlException::createForReason(ControlError::RequestUnexpected, frameClass: $request::class),
40        };
41    }
42}