merge master #80
@@ -84,9 +84,9 @@ func New(id, detail string, code int32) error {
 | 
			
		||||
// Parse tries to parse a JSON string into an error. If that
 | 
			
		||||
// fails, it will set the given string as the error detail.
 | 
			
		||||
func Parse(err string) *Error {
 | 
			
		||||
	e := new(Error)
 | 
			
		||||
	errr := json.Unmarshal([]byte(err), e)
 | 
			
		||||
	if errr != nil {
 | 
			
		||||
	e := &Error{}
 | 
			
		||||
	nerr := json.Unmarshal([]byte(err), e)
 | 
			
		||||
	if nerr != nil {
 | 
			
		||||
		e.Detail = err
 | 
			
		||||
	}
 | 
			
		||||
	return e
 | 
			
		||||
@@ -283,6 +283,10 @@ func (e *Error) Unmarshal(data []byte) error {
 | 
			
		||||
			return r == ':'
 | 
			
		||||
		})
 | 
			
		||||
		for idx := 0; idx < len(nparts); idx++ {
 | 
			
		||||
			if len(nparts[idx+1]) < 3 {
 | 
			
		||||
				idx++
 | 
			
		||||
				continue
 | 
			
		||||
			}
 | 
			
		||||
			switch {
 | 
			
		||||
			case nparts[idx] == `"id"`:
 | 
			
		||||
				e.ID = nparts[idx+1][1 : len(nparts[idx+1])-1]
 | 
			
		||||
@@ -297,6 +301,7 @@ func (e *Error) Unmarshal(data []byte) error {
 | 
			
		||||
				}
 | 
			
		||||
				e.Code = int32(c)
 | 
			
		||||
			}
 | 
			
		||||
			idx++
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	return nil
 | 
			
		||||
 
 | 
			
		||||
@@ -2,10 +2,24 @@ package errors
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	er "errors"
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"net/http"
 | 
			
		||||
	"testing"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func TestEmpty(t *testing.T) {
 | 
			
		||||
	msg := "test"
 | 
			
		||||
	var err *Error
 | 
			
		||||
	err = FromError(fmt.Errorf(msg))
 | 
			
		||||
	if err.Detail != msg {
 | 
			
		||||
		t.Fatalf("invalid error %v", err)
 | 
			
		||||
	}
 | 
			
		||||
	err = FromError(fmt.Errorf(`{"id":"","detail":"%s","status":"%s","code":0}`, msg, msg))
 | 
			
		||||
	if err.Detail != msg || err.Status != msg {
 | 
			
		||||
		t.Fatalf("invalid error %#+v", err)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func TestFromError(t *testing.T) {
 | 
			
		||||
	err := NotFound("go.micro.test", "%s", "example")
 | 
			
		||||
	merr := FromError(err)
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user