aboutsummaryrefslogtreecommitdiffstats
path: root/error.go
diff options
context:
space:
mode:
authorTeddy Wing2020-12-22 19:12:46 +0100
committerTeddy Wing2020-12-22 19:12:46 +0100
commita3fbf30512c30a8c9fac051063954f5a64eff9f3 (patch)
tree0e56773d6e7193b942b55e055adb879615fce2b5 /error.go
parentb89d9ed327fe7689edd72bfec815d754a724b850 (diff)
downloadbrowserenv-format-errors-and-use-error-values.tar.bz2
Return package-specific error messagesformat-errors-and-use-error-values
Instead of passing errors through to clients, wrap them with a "browserenv" error message to add context. Add new error types that can be matched against.
Diffstat (limited to 'error.go')
-rw-r--r--error.go76
1 files changed, 76 insertions, 0 deletions
diff --git a/error.go b/error.go
new file mode 100644
index 0000000..d90d1b8
--- /dev/null
+++ b/error.go
@@ -0,0 +1,76 @@
+package browserenv
+
+import "fmt"
+
+const errorPrefix = "browserenv: "
+
+// CopyError represents a failure to copy data.
+type CopyError struct {
+ err error
+}
+
+func (e *CopyError) Error() string {
+ return fmt.Sprintf(errorPrefix+"can't copy from reader: %v", e.err)
+}
+
+func (e *CopyError) Unwrap() error { return e.err }
+
+// ExecError results from executing an external command.
+type ExecError struct {
+ command string
+ err error
+}
+
+func (e *ExecError) Error() string {
+ return fmt.Sprintf(
+ errorPrefix+"failed to run BROWSER command %q: %v",
+ e.command,
+ e.err,
+ )
+}
+
+func (e *ExecError) Unwrap() error { return e.err }
+
+// ExecZeroError results from executing an external command that produces an
+// error with an exit code of 0.
+type ExecZeroError struct {
+ command string
+ err error
+}
+
+func (e *ExecZeroError) Error() string {
+ return fmt.Sprintf(
+ errorPrefix+"error running command %q: %v",
+ e.command,
+ e.err,
+ )
+}
+
+func (e *ExecZeroError) Unwrap() error { return e.err }
+
+// PathResolutionError means the given path couldn't be resolved.
+type PathResolutionError struct {
+ path string
+ err error
+}
+
+func (e *PathResolutionError) Error() string {
+ return fmt.Sprintf(
+ errorPrefix+"can't resolve path for %q: %v",
+ e.path,
+ e.err,
+ )
+}
+
+func (e *PathResolutionError) Unwrap() error { return e.err }
+
+// TempFileError corresponds to an error while creating a temporary file.
+type TempFileError struct {
+ err error
+}
+
+func (e *TempFileError) Error() string {
+ return fmt.Sprintf(errorPrefix+"can't create temporary file: %v", e.err)
+}
+
+func (e *TempFileError) Unwrap() error { return e.err }