hanayo/vendor/github.com/pariz/gountries/country.go

87 lines
1.6 KiB
Go
Raw Normal View History

2019-02-23 13:29:15 +00:00
package gountries
import (
"strings"
)
// Country contains all countries and their country codes
type Country struct {
Name struct {
BaseLang `yaml:",inline"`
Native map[string]BaseLang
} `json:"name"`
EuMember bool
LandLocked bool
Nationality string
TLDs []string `json:"tld"`
Languages map[string]string
Translations map[string]BaseLang
Currencies []string `json:"currency"`
Borders []string
// Grouped meta
Codes
Geo
Coordinates
// Private
subdivisions []SubDivision
}
// MeasurableCoordinates provides long/lat for country struct
// it does not store a pointer receiver to Country, as it needs to implement the
// Measurer interface
func (c Country) MeasurableCoordinates() (lat, long float64) {
return c.Coordinates.Latitude, c.Coordinates.Longitude
}
// BorderingCountries returns the bordering countries the given Country
func (c *Country) BorderingCountries() (countries []Country) {
query := New()
for _, cca3 := range c.Borders {
if country, err := query.FindCountryByAlpha(cca3); err == nil {
countries = append(countries, country)
}
}
return
}
// SubDivisions returns the subdivisions for the given Country
func (c *Country) SubDivisions() (subdivisions []SubDivision) {
query := New()
if res := query.Subdivisions[strings.ToLower(c.Alpha2)]; res != nil {
subdivisions = res
}
return
}
// Codes contains various code representations
type Codes struct {
Alpha2 string `json:"cca2"`
Alpha3 string `json:"cca3"`
CIOC string
CCN3 string
//CountryCode string // Yaml
CallingCodes []string `json:"callingCode"`
InternationalPrefix string // Yaml
}