2021-02-09 14:44:55 +00:00
|
|
|
package locode
|
|
|
|
|
|
|
|
// Prm groups the required parameters of the Validator's constructor.
|
|
|
|
//
|
|
|
|
// All values must comply with the requirements imposed on them.
|
|
|
|
// Passing incorrect parameter values will result in constructor
|
|
|
|
// failure (error or panic depending on the implementation).
|
|
|
|
type Prm struct {
|
|
|
|
// NeoFS LOCODE database interface.
|
|
|
|
//
|
|
|
|
// Must not be nil.
|
|
|
|
DB DB
|
|
|
|
}
|
|
|
|
|
|
|
|
// Validator is an utility that verifies and updates
|
|
|
|
// node attributes associated with its geographical location
|
|
|
|
// (LOCODE).
|
|
|
|
//
|
|
|
|
// For correct operation, Validator must be created
|
|
|
|
// using the constructor (New) based on the required parameters
|
|
|
|
// and optional components. After successful creation,
|
|
|
|
// the Validator is immediately ready to work through API.
|
|
|
|
type Validator struct {
|
|
|
|
db DB
|
|
|
|
|
|
|
|
mAttr map[string]attrDescriptor
|
|
|
|
}
|
|
|
|
|
|
|
|
// TODO: define constants in API lib.
|
|
|
|
const (
|
2021-02-10 10:13:42 +00:00
|
|
|
attrKeyLocode = "UN-LOCODE"
|
2021-02-09 14:44:55 +00:00
|
|
|
|
|
|
|
attrKeyCountryCode = "CountryCode"
|
|
|
|
attrKeyCountry = "Country"
|
|
|
|
|
2021-02-10 20:49:55 +00:00
|
|
|
attrKeyLocation = "Location"
|
2021-02-09 14:44:55 +00:00
|
|
|
|
|
|
|
attrKeySubDivCode = "SubDivCode"
|
|
|
|
attrKeySubDiv = "SubDiv"
|
|
|
|
|
|
|
|
attrKeyContinent = "Continent"
|
|
|
|
)
|
|
|
|
|
|
|
|
// New creates a new instance of the Validator.
|
|
|
|
//
|
|
|
|
// Panics if at least one value of the parameters is invalid.
|
|
|
|
//
|
|
|
|
// The created Validator does not require additional
|
|
|
|
// initialization and is completely ready for work.
|
|
|
|
func New(prm Prm) *Validator {
|
|
|
|
return &Validator{
|
|
|
|
db: prm.DB,
|
|
|
|
mAttr: map[string]attrDescriptor{
|
|
|
|
attrKeyCountryCode: {converter: countryCodeValue},
|
|
|
|
attrKeyCountry: {converter: countryValue},
|
|
|
|
|
2021-02-10 20:49:55 +00:00
|
|
|
attrKeyLocation: {converter: locationValue},
|
2021-02-09 14:44:55 +00:00
|
|
|
|
|
|
|
attrKeySubDivCode: {converter: subDivCodeValue, optional: true},
|
|
|
|
attrKeySubDiv: {converter: subDivValue, optional: true},
|
|
|
|
|
|
|
|
attrKeyContinent: {converter: continentValue},
|
|
|
|
},
|
|
|
|
}
|
|
|
|
}
|