diff --git a/webutil/formscanner.go b/webutil/formscanner.go index 0d50cb3..a77c2d0 100644 --- a/webutil/formscanner.go +++ b/webutil/formscanner.go @@ -2,6 +2,7 @@ package webutil import ( "errors" + "fmt" "net/url" "strconv" ) @@ -22,6 +23,10 @@ func (s *FormScanner) Scan(name string, val any) *FormScanner { return s } + setError := func(name string, err error) { + s.err = fmt.Errorf("Error in field %s: %w", name, err) + } + switch v := val.(type) { case *bool: *v = s.form.Has(name) @@ -29,78 +34,78 @@ func (s *FormScanner) Scan(name string, val any) *FormScanner { *v = s.form.Get(name) case *int: if i, err := strconv.ParseInt(s.form.Get(name), 10, 64); err != nil { - s.err = err + setError(name, err) } else { *v = int(i) } case *int8: if i, err := strconv.ParseInt(s.form.Get(name), 10, 8); err != nil { - s.err = err + setError(name, err) } else { *v = int8(i) } case *int16: if i, err := strconv.ParseInt(s.form.Get(name), 10, 16); err != nil { - s.err = err + setError(name, err) } else { *v = int16(i) } case *int32: if i, err := strconv.ParseInt(s.form.Get(name), 10, 32); err != nil { - s.err = err + setError(name, err) } else { *v = int32(i) } case *int64: if i, err := strconv.ParseInt(s.form.Get(name), 10, 64); err != nil { - s.err = err + setError(name, err) } else { *v = int64(i) } case *uint: if i, err := strconv.ParseUint(s.form.Get(name), 10, 64); err != nil { - s.err = err + setError(name, err) } else { *v = uint(i) } case *uint8: if i, err := strconv.ParseUint(s.form.Get(name), 10, 8); err != nil { - s.err = err + setError(name, err) } else { *v = uint8(i) } case *uint16: if i, err := strconv.ParseUint(s.form.Get(name), 10, 16); err != nil { - s.err = err + setError(name, err) } else { *v = uint16(i) } case *uint32: if i, err := strconv.ParseUint(s.form.Get(name), 10, 32); err != nil { - s.err = err + setError(name, err) } else { *v = uint32(i) } case *uint64: if i, err := strconv.ParseUint(s.form.Get(name), 10, 64); err != nil { - s.err = err + setError(name, err) } else { *v = uint64(i) } case *float32: if f, err := strconv.ParseFloat(s.form.Get(name), 32); err != nil { - s.err = err + setError(name, err) } else { *v = float32(f) } case *float64: if f, err := strconv.ParseFloat(s.form.Get(name), 64); err != nil { - s.err = err + setError(name, err) } else { *v = float64(f) } default: - s.err = ErrUnsupportedType + setError(name, ErrUnsupportedType) } return s