[#1403] util: Add details to errors

Make error messages more descriptive when parsing LOCODE from string errors
appear.

Signed-off-by: Pavel Karpy <carpawell@nspcc.ru>
This commit is contained in:
Pavel Karpy 2022-05-20 10:43:13 +03:00 committed by LeL
parent aeb9884218
commit f99a0498da
3 changed files with 25 additions and 7 deletions

View file

@ -1,6 +1,8 @@
package locodecolumn package locodecolumn
import ( import (
"fmt"
"github.com/nspcc-dev/neofs-node/pkg/util/locode" "github.com/nspcc-dev/neofs-node/pkg/util/locode"
) )
@ -16,8 +18,11 @@ func (cc *CountryCode) Symbols() [countryCodeLen]uint8 {
// CountryCodeFromString parses a string and returns the country code. // CountryCodeFromString parses a string and returns the country code.
func CountryCodeFromString(s string) (*CountryCode, error) { func CountryCodeFromString(s string) (*CountryCode, error) {
if len(s) != countryCodeLen { if l := len(s); l != countryCodeLen {
return nil, locode.ErrInvalidString return nil, fmt.Errorf("incorrect country code length: expect: %d, got: %d",
countryCodeLen,
l,
)
} }
for i := range s { for i := range s {

View file

@ -1,6 +1,8 @@
package locodecolumn package locodecolumn
import ( import (
"fmt"
"github.com/nspcc-dev/neofs-node/pkg/util/locode" "github.com/nspcc-dev/neofs-node/pkg/util/locode"
) )
@ -16,8 +18,11 @@ func (lc *LocationCode) Symbols() [locationCodeLen]uint8 {
// LocationCodeFromString parses a string and returns the location code. // LocationCodeFromString parses a string and returns the location code.
func LocationCodeFromString(s string) (*LocationCode, error) { func LocationCodeFromString(s string) (*LocationCode, error) {
if len(s) != locationCodeLen { if l := len(s); l != locationCodeLen {
return nil, locode.ErrInvalidString return nil, fmt.Errorf("incorrect location code length: expect: %d, got: %d",
locationCodeLen,
l,
)
} }
for i := range s { for i := range s {

View file

@ -2,6 +2,7 @@ package locode
import ( import (
"errors" "errors"
"fmt"
"strings" "strings"
) )
@ -51,11 +52,18 @@ var ErrInvalidString = errors.New("invalid string format in UN/Locode")
// //
// If string has incorrect format, ErrInvalidString returns. // If string has incorrect format, ErrInvalidString returns.
func FromString(s string) (*LOCODE, error) { func FromString(s string) (*LOCODE, error) {
const locationSeparator = " " const (
locationSeparator = " "
locodePartsNumber = 2
)
words := strings.Split(s, locationSeparator) words := strings.Split(s, locationSeparator)
if ln := len(words); ln != 1 && ln != 2 { if ln := len(words); ln != locodePartsNumber {
return nil, ErrInvalidString return nil, fmt.Errorf(
"incorrect locode: it must consist of %d codes separated with a witespase, got: %d",
locodePartsNumber,
ln,
)
} }
l := new(LOCODE) l := new(LOCODE)