Skip to content

Commit c47be7c

Browse files
committed
#3 Add error types
1 parent 73f3195 commit c47be7c

File tree

3 files changed

+49
-26
lines changed

3 files changed

+49
-26
lines changed

errors.go

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package mimeheader
2+
3+
type MimeParseErr struct {
4+
Err error
5+
Msg string
6+
}
7+
8+
func (e MimeParseErr) Error() string {
9+
if e.Err == nil {
10+
return e.Msg
11+
}
12+
13+
return e.Msg + ": " + e.Err.Error()
14+
}
15+
16+
func (e MimeParseErr) Unwrap() error {
17+
return e.Err
18+
}
19+
20+
type MimeTypePartsErr struct {
21+
Msg string
22+
}
23+
24+
func (e MimeTypePartsErr) Error() string {
25+
return e.Msg
26+
}
27+
28+
type MimeTypeWildcardErr struct {
29+
Msg string
30+
}
31+
32+
func (e MimeTypeWildcardErr) Error() string {
33+
return e.Msg
34+
}

parser.go

Lines changed: 8 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,32 @@
11
package mimeheader
22

33
import (
4-
"errors"
5-
"fmt"
64
"mime"
75
"strings"
86
)
97

10-
const ParseMediaTypeErrMsg = "error in a parse media type"
11-
12-
// Errors triggered by mime type parser.
13-
var (
14-
// ErrMimeTypeParts is wrong number of mime type parts.
15-
ErrMimeTypeParts = errors.New("wrong number of mime type parts")
16-
// ErrMimeTypeWildcard is wrong mimetype format.
17-
ErrMimeTypeWildcard = errors.New("mimetype cannot be as */plain")
8+
// Error messages.
9+
const (
10+
MimeParseErrMsg = "error in a parse media type"
11+
MimeTypePartsErrMsg = "wrong number of mime type parts"
12+
MimeTypeWildcardErrMsg = "mimetype cannot be as */plain"
1813
)
1914

2015
// ParseMediaType parses media type to MimeType structure.
2116
func ParseMediaType(mtype string) (MimeType, error) {
2217
mtype, params, err := mime.ParseMediaType(mtype)
2318
if err != nil {
24-
return MimeType{}, fmt.Errorf("%s: %w", ParseMediaTypeErrMsg, err)
19+
return MimeType{}, MimeParseErr{Err: err, Msg: MimeParseErrMsg}
2520
}
2621

2722
mtypes := strings.SplitN(mtype, MimeSeparator, MimeParts)
2823

2924
if len(mtypes) != MimeParts {
30-
return MimeType{}, ErrMimeTypeParts
25+
return MimeType{}, MimeTypePartsErr{Msg: MimeTypePartsErrMsg}
3126
}
3227

3328
if mtypes[0] == MimeAny && mtypes[1] != MimeAny {
34-
return MimeType{}, ErrMimeTypeWildcard
29+
return MimeType{}, MimeTypeWildcardErr{Msg: MimeTypeWildcardErrMsg}
3530
}
3631

3732
mt := MimeType{

parser_test.go

Lines changed: 7 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@ package mimeheader_test
22

33
import (
44
"errors"
5-
"fmt"
6-
"mime"
75
"reflect"
86
"testing"
97

@@ -19,12 +17,8 @@ func TestParseMediaType(t *testing.T) {
1917
t.Parallel()
2018

2119
b, err := mimeheader.ParseMediaType(prov.mtype)
22-
if (prov.expErr == nil) != (err == nil) {
23-
t.Errorf("Unexpected error.\nExpected: %+v\nActual: %+v\n", prov.expErr, err)
24-
}
25-
26-
if err != nil && prov.expErr != nil && prov.expErr.Error() != err.Error() {
27-
t.Fatalf("Enuxpected error message.\nExpected: %s\nActual: %s\n", prov.expErr.Error(), err.Error())
20+
if !errors.Is(err, prov.expErr) && !errors.As(err, &prov.expErr) {
21+
t.Errorf("Unexpected error.\nExpected: %#v\nActual: %#v\n", prov.expErr, err)
2822
}
2923

3024
if !reflect.DeepEqual(prov.exp, b) {
@@ -109,31 +103,31 @@ func providerParseMediaType() []parseMediaType {
109103
{
110104
name: "Empty error",
111105
mtype: "",
112-
expErr: fmt.Errorf("%s: %w", mimeheader.ParseMediaTypeErrMsg, errors.New("mime: no media type")),
106+
expErr: mimeheader.MimeParseErr{},
113107
exp: mimeheader.MimeType{},
114108
},
115109
{
116110
name: "Wrong wildcard",
117111
mtype: "*/plain",
118-
expErr: mimeheader.ErrMimeTypeWildcard,
112+
expErr: mimeheader.MimeTypeWildcardErr{},
119113
exp: mimeheader.MimeType{},
120114
},
121115
{
122116
name: "Wrong delimiters",
123117
mtype: "text/plain;;",
124-
expErr: fmt.Errorf("%s: %w", mimeheader.ParseMediaTypeErrMsg, errors.New("mime: invalid media parameter")),
118+
expErr: mimeheader.MimeParseErr{},
125119
exp: mimeheader.MimeType{},
126120
},
127121
{
128122
name: "Invalid parts number",
129123
mtype: "*-plain",
130-
expErr: mimeheader.ErrMimeTypeParts,
124+
expErr: mimeheader.MimeTypePartsErr{},
131125
exp: mimeheader.MimeType{},
132126
},
133127
{
134128
name: "Wrong parameter",
135129
mtype: "text/plain; p=",
136-
expErr: fmt.Errorf("%s: %w", mimeheader.ParseMediaTypeErrMsg, mime.ErrInvalidMediaParameter),
130+
expErr: mimeheader.MimeTypeWildcardErr{},
137131
exp: mimeheader.MimeType{},
138132
},
139133
}

0 commit comments

Comments
 (0)