A Docker-like CLI and HTTP API for managing headless VMs
1import { Data } from "effect";
2
3// API Errors
4export class ImageNotFoundError extends Data.TaggedError("ImageNotFoundError")<{
5 id: string;
6}> {}
7
8export class RemoveRunningVmError extends Data.TaggedError(
9 "RemoveRunningVmError",
10)<{
11 id: string;
12}> {}
13
14export class ParseRequestError extends Data.TaggedError("ParseRequestError")<{
15 cause?: unknown;
16 message: string;
17}> {}
18
19// Config Errors
20export class VmConfigError extends Data.TaggedError("VmConfigError")<{
21 cause?: string;
22}> {}
23
24// Volume Errors
25export class VolumeError extends Data.TaggedError("VolumeError")<{
26 message?: unknown;
27}> {}
28
29// ORAS/Image Registry Errors
30export class PushImageError extends Data.TaggedError("PushImageError")<{
31 cause?: unknown;
32}> {}
33
34export class PullImageError extends Data.TaggedError("PullImageError")<{
35 cause?: unknown;
36}> {}
37
38export class CreateDirectoryError extends Data.TaggedError(
39 "CreateDirectoryError",
40)<{
41 cause?: unknown;
42}> {}
43
44export class ImageAlreadyPulledError extends Data.TaggedError(
45 "ImageAlreadyPulledError",
46)<{
47 name: string;
48}> {}
49
50// Database Errors
51export class DbError extends Data.TaggedError("DatabaseError")<{
52 message?: string;
53 cause?: unknown;
54}> {}
55
56export class DbQueryError extends Data.TaggedError("DbQueryError")<{
57 cause?: unknown;
58}> {}
59
60// Network Errors
61export class NetworkError extends Data.TaggedError("NetworkError")<{
62 cause?: unknown;
63}> {}
64
65export class BridgeSetupError extends Data.TaggedError("BridgeSetupError")<{
66 cause?: unknown;
67}> {}
68
69// VM Operation Errors
70export class VmNotFoundError extends Data.TaggedError("VmNotFoundError")<{
71 name: string;
72}> {}
73
74export class VmAlreadyRunningError extends Data.TaggedError(
75 "VmAlreadyRunningError",
76)<{
77 name: string;
78}> {}
79
80export class StopCommandError extends Data.TaggedError("StopCommandError")<{
81 vmName: string;
82 exitCode: number;
83 message?: string;
84}> {}
85
86export class KillQemuError extends Data.TaggedError("KillQemuError")<{
87 vmName: string;
88}> {}
89
90export class CommandError extends Data.TaggedError("CommandError")<{
91 cause?: unknown;
92}> {}
93
94// Log Errors
95export class LogCommandError extends Data.TaggedError("LogCommandError")<{
96 vmName?: string;
97 exitCode?: number;
98 cause?: unknown;
99}> {}
100
101// Image/File Errors
102export class InvalidImageNameError extends Data.TaggedError(
103 "InvalidImageNameError",
104)<{
105 image: string;
106 cause?: unknown;
107}> {}
108
109export class NoSuchImageError extends Data.TaggedError("NoSuchImageError")<{
110 cause: string;
111}> {}
112
113export class NoSuchFileError extends Data.TaggedError("NoSuchFileError")<{
114 cause: string;
115}> {}