♻️ Use defined errors

This commit is contained in:
Dan Jones 2024-01-28 12:41:55 -06:00
commit 2d68691408
5 changed files with 34 additions and 20 deletions

View file

@ -29,12 +29,12 @@ func (e Entry) getFieldMarshalChan() chan metaRes {
// @todo figure out a way to handle json field
for i := 0; i < size; i++ {
wg.Add(1)
go func(i int) {
go func(m Meta) {
defer wg.Done()
o, er := e.Fields[i].MarshalText()
o, er := m.MarshalText()
ch <- metaRes{o, er}
}(i)
}(e.Fields[i])
}
go func() {
@ -47,10 +47,10 @@ func (e Entry) getFieldMarshalChan() chan metaRes {
func (e Entry) MarshalText() ([]byte, error) {
e.Title = strings.TrimSpace(e.Title)
if e.Title == "" {
return []byte{}, errors.New("Empty title")
return []byte{}, ErrorMissingTitle
}
if e.Date == (time.Time{}) {
return []byte{}, errors.New("Empty date")
return []byte{}, ErrorMissingDate
}
ch := e.getFieldMarshalChan()
buff := &bytes.Buffer{}

View file

@ -28,8 +28,8 @@ func TestEntryMarshal(t *testing.T) {
lines []string
err error
}{
{"no-title", "", when, simple, "", nolines, errors.New("Empty title")},
{"zero-date", "Empty title", time.Time{}, simple, "", nolines, errors.New("Empty date")},
{"no-title", "", when, simple, "", nolines, ErrorMissingTitle},
{"zero-date", "Empty title", time.Time{}, simple, "", nolines, ErrorMissingDate},
{"one-line", "A Title", when, simple, "@begin " + whens + " - A Title @end", nolines, nil},
{
"one-field",
@ -102,8 +102,8 @@ func TestEntryUnmarshal(t *testing.T) {
}{
{"one-line", "@begin " + whens + " - A Title @end", "A Title", when, simple, nil},
{"multi-title", "@begin " + whens + " - A Title\nwith break @end", "A Title\nwith break", when, simple, nil},
{"no-title", "@begin " + whens + " - @end", "", when, simple, errors.New("Missing title")},
{"no-date", "@begin - A Title @end", "A Title", when, simple, errors.New("Missing date")},
{"no-title", "@begin " + whens + " - @end", "", when, simple, errors.New("Missing title")},
{"no-date", "@begin - A Title @end", "A Title", when, simple, errors.New("Missing date")},
{"one-field", "@begin " + whens + " - A Title\n@age 41 @end", "A Title", when, []Meta{{"age", 41}}, nil},
{
"two-fields",

14
models/errors.go Normal file
View file

@ -0,0 +1,14 @@
package models
import (
"errors"
"fmt"
)
var ErrorMissingTitle = errors.New("Missing title")
var ErrorMissingDate = errors.New("Missing date")
var ErrorParsing = errors.New("Parsing Error")
func newParsingError(err error) error {
return fmt.Errorf("%w: %w", ErrorParsing, err)
}

View file

@ -56,12 +56,12 @@ func (m Meta) MarshalText() ([]byte, error) {
func (m *Meta) UnmarshalText(in []byte) error {
if len(in) == 0 {
return errors.New("Unable to Unmarshal empty string")
return newParsingError(errors.New("Unable to Unmarshal empty string"))
}
re := regexp.MustCompile("(?s)^@([^ ]+) (.*)( @end)?$")
match := re.FindSubmatch(in)
if len(match) == 0 {
return fmt.Errorf("Failed to match %s", in)
return newParsingError(fmt.Errorf("Failed to match %s", in))
}
m.Key = string(match[1])
return m.processMeta(match[2])
@ -69,11 +69,11 @@ func (m *Meta) UnmarshalText(in []byte) error {
func (m *Meta) processMeta(in []byte) error {
if len(in) == 0 {
return errors.New("No value found")
return newParsingError(errors.New("No value found"))
}
s := strings.TrimSpace(string(in))
if len(s) == 0 {
return errors.New("No value found")
return newParsingError(errors.New("No value found"))
}
yesno := regexp.MustCompile("^(y|Y|yes|Yes|YES|n|N|no|No|NO|true|True|TRUE|false|False|FALSE|on|On|ON|off|Off|OFF)$")
yes := regexp.MustCompile("^(y|Y|yes|Yes|YES|true|True|TRUE|on|On|ON)$")

View file

@ -32,7 +32,7 @@ func TestMeta(t *testing.T) {
{"json number", "num", json.Number("42.13"), "@num 42.13", nil, 42.13},
{"true", "b", true, "@b true", nil, true},
{"false", "b", false, "@b false", nil, false},
{"nil", "n", nil, "", nil, errors.New("Unable to Unmarshal empty string")},
{"nil", "n", nil, "", nil, ErrorParsing},
{"time", "when", when, "@when " + when.Format(time.RFC3339), nil, when},
{"rune", "char", '@', "@char @", nil, "@"},
{"bytes", "byteme", []byte("yo"), "@byteme yo", nil, "yo"},
@ -41,11 +41,11 @@ func TestMeta(t *testing.T) {
{"json-arr", "arr", json.RawMessage(`["foo",42,"bar", null,"quux", true]`), `@arr ["foo",42,"bar", null,"quux", true]`, nil, json.RawMessage(`["foo",42,"bar", null,"quux", true]`)},
{"chan", "nope", make(chan bool), "", errors.New("Unknown type chan bool"), ""},
{"whitespace-key", "no space", "hi", "", errors.New("whitespace is not allowed in key: no space"), ""},
{"empty-mar", "nope", skipMarshalTest, "", nil, errors.New("Unable to Unmarshal empty string")},
{"no-key-mar", "nope", skipMarshalTest, "nope", nil, errors.New("Failed to match nope")},
{"no-value-mar", "nope", skipMarshalTest, "@nope ", nil, errors.New("No value found")},
{"space-value-mar", "nope", skipMarshalTest, "@nope ", nil, errors.New("No value found")},
{"space-value-mar", "nope", skipMarshalTest, "@nope \n ", nil, errors.New("No value found")},
{"empty-mar", "nope", skipMarshalTest, "", nil, ErrorParsing},
{"no-key-mar", "nope", skipMarshalTest, "nope", nil, ErrorParsing},
{"no-value-mar", "nope", skipMarshalTest, "@nope ", nil, ErrorParsing},
{"space-value-mar", "nope", skipMarshalTest, "@nope ", nil, ErrorParsing},
{"space-nl-value-mar", "nope", skipMarshalTest, "@nope \n ", nil, ErrorParsing},
{"null-value-mar", "nope", skipMarshalTest, "@nope null", nil, nil},
{"tilda-value-mar", "nope", skipMarshalTest, "@nope ~", nil, nil},
{"none-value-mar", "nope", skipMarshalTest, "@nope none", nil, nil},
@ -81,7 +81,7 @@ func getMetaTestRunner(key string, value any, out string, err error, newVal any)
e = n.UnmarshalText([]byte(out))
}
if newE, ok := newVal.(error); ok {
assert.Equal(t, newE, e)
assert.ErrorIs(t, e, newE)
} else {
assert.Equal(t, key, n.Key)
if ti, ok := newVal.(time.Time); ok {