diff --git a/commands/command.go b/commands/command.go
index <HASH>..<HASH> 100644
--- a/commands/command.go
+++ b/commands/command.go
@@ -103,11 +103,12 @@ func (c *Command) Call(req Request) Response {
 	if err != nil {
 		// if returned error is a commands.Error, use its error code
 		// otherwise, just default the code to ErrNormal
-		var e Error
-		e, ok := err.(Error)
-		if ok {
+		switch e := err.(type) {
+		case *Error:
 			res.SetError(e, e.Code)
-		} else {
+		case Error:
+			res.SetError(e, e.Code)
+		default:
 			res.SetError(err, ErrNormal)
 		}
 		return res
fix(commands/err)

I didn't know there were dragons here.

When casting errors we've gotta be careful. Apparently both values and
pointers satisfy the error interface. Type checking for one doesn't
catch the other.

cc @whyrusleeping @mappum @jbenet

License: MIT