diff --git a/kernel/error.go b/kernel/error.go new file mode 100644 index 0000000..c3accfd --- /dev/null +++ b/kernel/error.go @@ -0,0 +1,18 @@ +package kernel + +// Error describes a kernel kerror. All kernel errors must be defined as global +// variables that are pointers to the Error structure. This requirement stems +// from the fact that the Go allocator is not available to us so we cannot use +// errors.New. +type Error struct { + // The module where the error occurred. + Module string + + // The error message + Message string +} + +// Error implements the error interface. +func (e *Error) Error() string { + return e.Message +} diff --git a/kernel/error_test.go b/kernel/error_test.go new file mode 100644 index 0000000..64d1b43 --- /dev/null +++ b/kernel/error_test.go @@ -0,0 +1,14 @@ +package kernel + +import "testing" + +func TestKernelError(t *testing.T) { + err := &Error{ + Module: "foo", + Message: "error message", + } + + if err.Error() != err.Message { + t.Fatalf("expected to err.Error() to return %q; got %q", err.Message, err.Error()) + } +}