[#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:
parent
aeb9884218
commit
f99a0498da
3 changed files with 25 additions and 7 deletions
|
@ -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 {
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
|
@ -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)
|
||||||
|
|
Loading…
Reference in a new issue