diff --git a/.gx/lastpubver b/.gx/lastpubver index f8b4e5b7ffa4ed541df70ecdb763216e4074ea24..270c9b79b4908c4806dce8d1e107f6f3d7f1d9be 100644 --- a/.gx/lastpubver +++ b/.gx/lastpubver @@ -1 +1 @@ -1.0.5: QmZ9hww8R3FKrDRCYPxhN13m6XgjPDpaSvdUfisPvERzXz +1.0.6: QmWGgKRz5S24SqaAapF5PPCfYfLT7MexJZewN5M82CQTzs diff --git a/encoding.go b/encoding.go index 0a4b88db3fe40aff3599b7e8adc5196cc44989c2..cd1d07e28937f6f4311eef39f0d2dc06d23408c0 100644 --- a/encoding.go +++ b/encoding.go @@ -103,7 +103,11 @@ func MakeTypedEncoder(f interface{}) func(*Request) func(io.Writer) Encoder { reflect.ValueOf(i), }) - return out[0].Interface().(error) + err, ok := out[0].Interface().(error) + if ok { + return err + } + return nil }) } diff --git a/encoding_test.go b/encoding_test.go new file mode 100644 index 0000000000000000000000000000000000000000..e42efe0a5af0bfa29fae8e7b629a5d0395acc02f --- /dev/null +++ b/encoding_test.go @@ -0,0 +1,37 @@ +package cmds + +import ( + "bytes" + "fmt" + "io" + "testing" +) + +type fooTestObj struct { + Good bool +} + +func TestMakeTypedEncoder(t *testing.T) { + expErr := fmt.Errorf("command fooTestObj failed") + f := MakeTypedEncoder(func(req *Request, w io.Writer, v *fooTestObj) error { + if v.Good { + return nil + } + return expErr + }) + + req := &Request{} + + encoderFunc := f(req) + + buf := new(bytes.Buffer) + encoder := encoderFunc(buf) + + if err := encoder.Encode(&fooTestObj{true}); err != nil { + t.Fatal(err) + } + + if err := encoder.Encode(&fooTestObj{false}); err != expErr { + t.Fatal("expected: ", expErr) + } +} diff --git a/package.json b/package.json index f31c17245591ba9471cf8cdeec6bb74b5e8ee46f..b1373c9b93dbf73c0dcb3fb962d5fafcaf0166f1 100644 --- a/package.json +++ b/package.json @@ -47,6 +47,6 @@ "license": "MIT", "name": "go-ipfs-cmds", "releaseCmd": "git commit -a -m \"gx publish $VERSION\"", - "version": "1.0.5" + "version": "1.0.6" }