From c758a4cfb073656af8b451cac8b993fced0fe671 Mon Sep 17 00:00:00 2001 From: Jeromy Date: Fri, 2 Feb 2018 13:26:12 -0800 Subject: [PATCH] Fix MakeTypedEncoder bug --- .gx/lastpubver | 2 +- encoding.go | 6 +++++- encoding_test.go | 37 +++++++++++++++++++++++++++++++++++++ package.json | 2 +- 4 files changed, 44 insertions(+), 3 deletions(-) create mode 100644 encoding_test.go diff --git a/.gx/lastpubver b/.gx/lastpubver index f8b4e5b..270c9b7 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 0a4b88d..cd1d07e 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 0000000..e42efe0 --- /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 f31c172..b1373c9 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" } -- GitLab