forked from TrueCloudLab/frostfs-node
[#316] locode: Define structure of the entry of the UN/LOCODE table
Signed-off-by: Leonard Lyubich <leonard@nspcc.ru>
This commit is contained in:
parent
9618c3e268
commit
137ef25d3e
1 changed files with 76 additions and 0 deletions
76
pkg/util/locode/record.go
Normal file
76
pkg/util/locode/record.go
Normal file
|
@ -0,0 +1,76 @@
|
||||||
|
package locode
|
||||||
|
|
||||||
|
import (
|
||||||
|
"strings"
|
||||||
|
|
||||||
|
"github.com/pkg/errors"
|
||||||
|
)
|
||||||
|
|
||||||
|
// LOCODE represents code from UN/LOCODE coding scheme.
|
||||||
|
type LOCODE [2]string
|
||||||
|
|
||||||
|
// Record represents a single record of the UN/LOCODE table.
|
||||||
|
type Record struct {
|
||||||
|
// Change Indicator.
|
||||||
|
Ch string
|
||||||
|
|
||||||
|
// Combination of a 2-character country code and a 3-character location code.
|
||||||
|
LOCODE LOCODE
|
||||||
|
|
||||||
|
// Name of the locations which has been allocated a UN/LOCODE.
|
||||||
|
Name string
|
||||||
|
|
||||||
|
// Names of the locations which have been allocated a UN/LOCODE without diacritic signs.
|
||||||
|
NameWoDiacritics string
|
||||||
|
|
||||||
|
// ISO 1-3 character alphabetic and/or numeric code for the administrative division of the country concerned.
|
||||||
|
SubDiv string
|
||||||
|
|
||||||
|
// 8-digit function classifier code for the location.
|
||||||
|
Function string
|
||||||
|
|
||||||
|
// Status of the entry by a 2-character code.
|
||||||
|
Status string
|
||||||
|
|
||||||
|
// Last date when the location was updated/entered.
|
||||||
|
Date string
|
||||||
|
|
||||||
|
// The IATA code for the location if different from location code in column LOCODE.
|
||||||
|
IATA string
|
||||||
|
|
||||||
|
// Geographical coordinates (latitude/longitude) of the location, if there is any.
|
||||||
|
Coordinates string
|
||||||
|
|
||||||
|
// Some general remarks regarding the UN/LOCODE in question.
|
||||||
|
Remarks string
|
||||||
|
}
|
||||||
|
|
||||||
|
// ErrInvalidString is the error of incorrect string format of the LOCODE.
|
||||||
|
var ErrInvalidString = errors.New("invalid string format in UN/Locode")
|
||||||
|
|
||||||
|
// FromString parses string and returns LOCODE.
|
||||||
|
//
|
||||||
|
// If string has incorrect format, ErrInvalidString returns.
|
||||||
|
func FromString(s string) (*LOCODE, error) {
|
||||||
|
const locationSeparator = " "
|
||||||
|
|
||||||
|
words := strings.Split(s, locationSeparator)
|
||||||
|
if ln := len(words); ln != 1 && ln != 2 {
|
||||||
|
return nil, ErrInvalidString
|
||||||
|
}
|
||||||
|
|
||||||
|
l := new(LOCODE)
|
||||||
|
copy(l[:], words)
|
||||||
|
|
||||||
|
return l, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// CountryCode returns a string representation of country code.
|
||||||
|
func (l *LOCODE) CountryCode() string {
|
||||||
|
return l[0]
|
||||||
|
}
|
||||||
|
|
||||||
|
// LocationCode returns a string representation of location code.
|
||||||
|
func (l *LOCODE) LocationCode() string {
|
||||||
|
return l[1]
|
||||||
|
}
|
Loading…
Reference in a new issue