├── .circleci └── config.yml ├── .deepsource.toml ├── .github ├── FUNDING.yml └── workflows │ └── go.yml ├── .gitignore ├── .readthedocs.yaml ├── .semaphore └── semaphore.yml ├── .travis.yml ├── AUTHORS ├── CHANGELOG.md ├── LICENSE ├── README.md ├── callcodes.go ├── callcodesconst.go ├── capitals.go ├── capitalsconst.go ├── changelog.txt ├── countries.go ├── countries_test.go ├── countriesconst.go ├── coverage.out ├── currencies.go ├── currenciesconst.go ├── data └── iso-codes │ ├── data_iso_3166-1.json │ ├── data_iso_3166-2.json │ └── data_iso_3166-3.json ├── doc ├── conf.py └── mkdocs.yml ├── domains.go ├── domainsconst.go ├── example └── countries_example.go ├── go.mod ├── go.sum ├── regions.go ├── regionsconst.go ├── subdivisions.go ├── subdivisions_test.go ├── subdivisionsconst.go ├── subdivisionstypeconst.go ├── subdivisiontype.go ├── textprepare.go ├── travis.yml └── value.go /.circleci/config.yml: -------------------------------------------------------------------------------- 1 | 2 | # CircleCI 2.0 configuration file 3 | # 4 | # Check https://circleci.com/docs/2.0/language-go/ for more details 5 | version: 2 6 | jobs: 7 | test: 8 | docker: 9 | # specify the version 10 | - image: circleci/golang:1.13 11 | 12 | # Specify service dependencies here if necessary 13 | # CircleCI maintains a library of pre-built images 14 | # documented at https://circleci.com/docs/2.0/circleci-images/ 15 | # - image: circleci/postgres:9.4 16 | 17 | #### TEMPLATE_NOTE: go expects specific checkout path representing url 18 | #### expecting it in the form of 19 | #### /go/src/github.com/circleci/go-tool 20 | #### /go/src/bitbucket.org/circleci/go-tool 21 | working_directory: /go/src/github.com/biter777/countries 22 | steps: 23 | - checkout 24 | 25 | # specify any bash command here prefixed with `run: ` 26 | - run: go get -v -t -d ./... 27 | # - run: bash gofmt.sh 28 | - run: go vet 29 | - run: go test -v ./... 30 | 31 | race: 32 | docker: 33 | # specify the version 34 | - image: circleci/golang:1.13 35 | 36 | # Specify service dependencies here if necessary 37 | # CircleCI maintains a library of pre-built images 38 | # documented at https://circleci.com/docs/2.0/circleci-images/ 39 | # - image: circleci/postgres:9.4 40 | 41 | #### TEMPLATE_NOTE: go expects specific checkout path representing url 42 | #### expecting it in the form of 43 | #### /go/src/github.com/circleci/go-tool 44 | #### /go/src/bitbucket.org/circleci/go-tool 45 | working_directory: /go/src/github.com/biter777/countries 46 | steps: 47 | - checkout 48 | 49 | # specify any bash command here prefixed with `run: ` 50 | - run: go get -v -t -d ./... 51 | - run: 52 | command: go test -race -v ./... 53 | environment: 54 | GORACE: "halt_on_error=1" 55 | 56 | # end_to_end: 57 | # working_directory: /go/src/github.com/biter777/countries 58 | # docker: 59 | # - image: circleci/golang:1.13 60 | # steps: 61 | # - checkout 62 | # - run: sudo apt-get install python-requests 63 | # - run: go get -t -d -v ./... 64 | # - run: go install ./... 65 | # - run: 66 | # command: system_test/full_system_test.py 67 | # environment: 68 | 69 | workflows: 70 | version: 2 71 | build_and_test: 72 | jobs: 73 | - test 74 | - race 75 | # - end_to_end -------------------------------------------------------------------------------- /.deepsource.toml: -------------------------------------------------------------------------------- 1 | version = 1 2 | 3 | [[analyzers]] 4 | name = "go" 5 | enabled = true 6 | 7 | [analyzers.meta] 8 | import_root = "github.com/biter777/countries" -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | 3 | github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] 4 | patreon: # Replace with a single Patreon username 5 | open_collective: # Replace with a single Open Collective username 6 | liberapay: biter777 7 | ko_fi: biter777 8 | tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel 9 | community_bridge: countries 10 | issuehunt: # Replace with a single IssueHunt username 11 | otechie: # Replace with a single Otechie username 12 | custom: ['https://www.buymeacoffee.com/CAhuDKg', 'https://pay.cloudtips.ru/p/94fc4268'] # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] 13 | -------------------------------------------------------------------------------- /.github/workflows/go.yml: -------------------------------------------------------------------------------- 1 | name: Go 2 | on: [push] 3 | jobs: 4 | 5 | build: 6 | name: Build 7 | runs-on: ubuntu-latest 8 | steps: 9 | 10 | - name: Set up Go 1.13 11 | uses: actions/setup-go@v1 12 | with: 13 | go-version: 1.13 14 | id: go 15 | 16 | - name: Check out code into the Go module directory 17 | uses: actions/checkout@v1 18 | 19 | - name: Get dependencies 20 | run: | 21 | go get -v -t -d ./... 22 | if [ -f Gopkg.toml ]; then 23 | curl https://raw.githubusercontent.com/golang/dep/master/install.sh | sh 24 | dep ensure 25 | fi 26 | 27 | - name: Build 28 | run: go build -v . 29 | - name: Test 30 | run: go test -v . 31 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # IDE related file 2 | .idea/ 3 | 4 | # Binaries for programs and plugins 5 | *.exe 6 | *.exe~ 7 | *.dll 8 | *.so 9 | *.dylib 10 | 11 | # Test binary, build with `go test -c` 12 | *.test 13 | 14 | # Output of the go coverage tool, specifically when used with LiteIDE 15 | *.out 16 | 17 | # go mod 18 | *.mod 19 | *.sum 20 | 21 | # temp 22 | *.log 23 | *.lock 24 | *.tmp 25 | *.temp 26 | *.pas 27 | *._* 28 | *.~ 29 | *.~* 30 | *.*~ 31 | *.git 32 | .git 33 | .gitignore 34 | .github 35 | *todo* 36 | 37 | # arch 38 | *.rar 39 | *.zip 40 | *.gz 41 | *.tar 42 | *.7z 43 | *.tar 44 | *.tar.* 45 | -------------------------------------------------------------------------------- /.readthedocs.yaml: -------------------------------------------------------------------------------- 1 | # Read the Docs configuration file for MkDocs projects 2 | # See https://docs.readthedocs.io/en/stable/config-file/v2.html for details 3 | 4 | # Required 5 | version: 2 6 | 7 | # Set the version of Python and other tools you might need 8 | build: 9 | os: ubuntu-22.04 10 | tools: 11 | golang: "1.20" 12 | # python: "3.12" 13 | 14 | mkdocs: 15 | configuration: docs/mkdocs.yml 16 | 17 | # Optionally declare the Python requirements required to build your docs 18 | # python: 19 | # install: 20 | # - requirements: docs/requirements.txt 21 | -------------------------------------------------------------------------------- /.semaphore/semaphore.yml: -------------------------------------------------------------------------------- 1 | version: v1.0 2 | name: Go 3 | agent: 4 | machine: 5 | type: e1-standard-2 6 | os_image: ubuntu1804 7 | blocks: 8 | - name: Test 9 | task: 10 | jobs: 11 | - name: go test 12 | commands: 13 | - sem-version go 1.13 14 | - export GO111MODULE=on 15 | - export GOPATH=~/go 16 | - 'export PATH=/home/semaphore/go/bin:$PATH' 17 | - checkout 18 | - go get ./... 19 | - go test ./... 20 | - go build -v . 21 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: go 2 | 3 | go: 4 | - 1.13.x 5 | - tip 6 | 7 | before_install: 8 | - go get -t -v ./... 9 | 10 | install: 11 | - go get github.com/biter777/countries 12 | 13 | script: 14 | - go test -v -race -coverprofile=coverage.txt -covermode=atomic 15 | 16 | after_success: 17 | - bash <(curl -s https://codecov.io/bash) 18 | 19 | notifications: 20 | email: false -------------------------------------------------------------------------------- /AUTHORS: -------------------------------------------------------------------------------- 1 | (c) by biter and contributors: https://github.com/biter777/countries/graphs/contributors 2 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # countries changelog 2 | 3 | ## v1.6.0 (2023-01-16) 4 | Add and fix codes (VES, 986), add counties names 5 | 6 | ## v1.5.5 (2022-11-06) 7 | 8 | * BYR/BYN updated, updates codes, fix module name error, fix some linters warnings 9 | 10 | ## v1.4.0 (TBA) 11 | 12 | * Add: subdivisions as per ISO 3166-2. 13 | 14 | Use of [iso-codes](https://salsa.debian.org/iso-codes-team/iso-codes) data 15 | as the source of information for the creation of the subdivisions. 16 | 17 | * Add: subdivision type as per ISO 3166-2 usage. 18 | 19 | ## v1.3.4 (2020-10-26) 20 | 21 | * Add: synonyms for various countries. 22 | * Bugfix: Vietnam country name. 23 | 24 | ## v1.3.3 (2020-10-20) 25 | 26 | * Add: synonyms for various countries. 27 | * Update: callcodes for: WS, PS, TM. 28 | * Bugfix: currency for: US, CH. 29 | 30 | ## TODO further back 31 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2019 Biter, biter2004@yandex.ru. All rights reserved. 2 | 3 | Redistribution and use in source and binary forms, with or without 4 | modification, are permitted provided that the following conditions are 5 | met: 6 | 7 | * Redistributions of source code must retain the above copyright 8 | notice, this list of conditions and the following disclaimer. 9 | * Redistributions in binary form must reproduce the above 10 | copyright notice, this list of conditions and the following disclaimer 11 | in the documentation and/or other materials provided with the 12 | distribution. 13 | 14 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 15 | "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 16 | LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 17 | A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 18 | OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 19 | SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 20 | LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 21 | DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 22 | THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 23 | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 24 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 25 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # countries 2 | 3 | Countries - ISO 639, ISO 3166 (ISO3166-1, ISO3166, Digit, Alpha-2, Alpha-3) countries codes with subdivisions and names (on eng and rus), ISO4217 currency designators, ITU-T E.164 IDD calling phone codes, countries capitals, UN M.49 regions codes, IANA ccTLD countries domains, FIPS, IOC/NOC and FIFA codes, **VERY VERY FAST**, NO maps[], NO slices[], NO init() funcs, NO external links/files/data, NO interface{}, NO specific dependencies, compatible with Databases/JSON/BSON/GOB/XML/CSV, Emoji countries flags and currencies support, UN M.49, FIFA codes, full support ISO 639-1, ISO 3166-1, ISO 3166-2, ISO 4217, ITU-T E.164, Unicode CLDR and IANA ccTLD standarts. 4 | 5 | **Supported standarts:** 6 | - ISO 639-1 7 | - ISO 3166-1 8 | - ISO 3166-2 9 | - ISO 4217 10 | - ICANN 11 | - IANA ccTLD 12 | - ITU-T E.164 13 | - IOC 14 | - NOC 15 | - FIFA 16 | - FIPS 17 | - UN M.49 18 | - Unicode CLDR 19 | - Unicode Emoticons Flags 20 | - Unicode Emoticons Currencies 21 | - UN World Countries Capitals 22 | 23 | [![GoDev](https://img.shields.io/badge/godev-reference-5b77b3)](https://pkg.go.dev/github.com/biter777/countries?tab=doc) 24 | [![GoAwesome](https://img.shields.io/badge/awesome%20go-reference-5b77b3)](https://awesome-go.com/utilities/) 25 | [![Coder](https://img.shields.io/badge/coder-reference-5b77b3)](https://coder.social/biter777/countries) 26 | [![DOI](https://zenodo.org/badge/182808313.svg)](https://zenodo.org/badge/latestdoi/182808313) 27 | [![codeclimate](https://codeclimate.com/github/biter777/countries/badges/gpa.svg)](https://codeclimate.com/github/biter777/countries) 28 | [![GolangCI](https://golangci.com/badges/github.com/biter777/countries.svg?style=flat)](https://golangci.com/r/github.com/biter777/countries) 29 | [![GoReport](https://goreportcard.com/badge/github.com/biter777/countries)](https://goreportcard.com/report/github.com/biter777/countries) 30 | [![Codiga](https://img.shields.io/badge/codiga%20quality-A+-brightgreen)](https://app.codiga.io/project/3255/dashboard) 31 | [![Codacy Badge](https://api.codacy.com/project/badge/Grade/08eb1d2ff62e465091b3a288ae078a96)](https://www.codacy.com/manual/biter777/countries?utm_source=github.com&utm_medium=referral&utm_content=biter777/countries&utm_campaign=Badge_Grade) 32 | [![codecov](https://codecov.io/gh/biter777/countries/branch/master/graph/badge.svg)](https://codecov.io/gh/biter777/countries) 33 | [![Coverage Status](https://coveralls.io/repos/github/biter777/countries/badge.svg?branch=master)](https://coveralls.io/github/biter777/countries?branch=master) 34 | [![Coverage](https://img.shields.io/badge/coverage-gocover.io-brightgreen)](https://gocover.io/github.com/biter777/countries) 35 | [![ISO](https://img.shields.io/badge/powered%20by-ISO-brightgreen)](https://www.iso.org/) 36 | [![ITU](https://img.shields.io/badge/powered%20by-ITU-brightgreen)](https://www.itu.int/) 37 | [![IANA](https://img.shields.io/badge/powered%20by-IANA-brightgreen)](http://www.iana.org/) 38 | [![ICANN](https://img.shields.io/badge/powered%20by-ICANN-brightgreen)](https://www.icann.org/) 39 | [![M49](https://img.shields.io/badge/powered%20by-UN%20M49-brightgreen)](https://unstats.un.org/unsd/methodology/m49/) 40 | [![CLDR](https://img.shields.io/badge/powered%20by-CLDR-brightgreen)](https://cldr.unicode.org/) 41 | [![License](https://img.shields.io/badge/License-BSD%202--Clause-brightgreen.svg)](https://opensource.org/licenses/BSD-2-Clause) 42 | [![Build status](https://ci.appveyor.com/api/projects/status/t9lpor9o8tpacpmr/branch/master?svg=true)](https://ci.appveyor.com/project/biter777/countries/branch/master) 43 | [![Build Status](https://github.com/biter777/countries/actions/workflows/go.yml/badge.svg)](https://github.com/biter777/countries/actions/workflows/go.yml) 44 | [![CLDR](https://img.shields.io/badge/deepsource-passing-brightgreen)]([https://cldr.unicode.org/](https://deepsource.io/gh/biter777/countries)) 45 | DMCA.com Protection Status 46 | [![Dependencies Free](https://img.shields.io/badge/dependencies-free-brightgreen)](https://pkg.go.dev/github.com/biter777/countries?tab=imports) 47 | [![Gluten Free](https://img.shields.io/badge/gluten-free-brightgreen)](https://www.scsglobalservices.com/services/gluten-free-certification) 48 | [![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen)](https://github.com/biter777/countries/pulls) 49 | [![DepShield Badge](https://depshield.sonatype.org/badges/biter777/countries/depshield.svg)](https://depshield.github.io) 50 | [![Stars](https://img.shields.io/github/stars/biter777/countries?label=Please%20like%20us&style=social)](https://github.com/biter777/countries/stargazers) 51 |
52 | 53 | ## installation 54 | 55 | ```shell 56 | go get github.com/biter777/countries 57 | ``` 58 | 59 | ## usage 60 | 61 | ```go 62 | countryJapan := countries.Japan 63 | fmt.Printf("Country name in english: %v\n", countryJapan) // Japan 64 | fmt.Printf("Country name in russian: %v\n", countryJapan.StringRus()) // Япония 65 | fmt.Printf("Country ISO-3166 digit code: %d\n", countryJapan) // 392 66 | fmt.Printf("Country ISO-3166 Alpha-2 code: %v\n", countryJapan.Alpha2()) // JP 67 | fmt.Printf("Country ISO-3166 Alpha-3 code: %v\n", countryJapan.Alpha3()) // JPN 68 | fmt.Printf("Country IOC/NOC code: %v\n", countryJapan.IOC()) // JPN 69 | fmt.Printf("Country FIFA code: %v\n", countryJapan.FIFA()) // JPN 70 | fmt.Printf("Country FIPS code: %v\n", countryJapan.FIPS()) // JA 71 | fmt.Printf("Country Capital: %v\n", countryJapan.Capital()) // Tokyo 72 | fmt.Printf("Country ITU-T E.164 call code: %v\n", countryJapan.CallCodes()) // +81 73 | fmt.Printf("Country ccTLD domain: %v\n", countryJapan.Domain()) // .jp 74 | fmt.Printf("Country UN M.49 region name: %v\n", countryJapan.Region()) // Asia 75 | fmt.Printf("Country UN M.49 region code: %d\n", countryJapan.Region()) // 142 76 | fmt.Printf("Country emoji/flag: %v\n", countryJapan.Emoji()) // 🇯🇵 77 | fmt.Printf("Country Subdivisions: %v\n", countryJapan.Subdivisions()) // Hokkaido Aomori Iwate Miyagi Akita Yamagata Fukushima Ibaraki Tochigi Gunma Saitama Chiba Tokyo Kanagawa Niigata Toyama Ishikawa Fukui Yamanashi Nagano Gifu Shizuoka Aichi Mie Shiga Kyoto Osaka Hyogo Nara Wakayama Tottori Shimane Okayama Hiroshima Yamaguchi Tokushima Kagawa Ehime Kochi Fukuoka Saga Nagasaki Kumamoto Oita Miyazaki Kagoshima Okinawa 78 | 79 | currencyJapan := countryJapan.Currency() 80 | fmt.Printf("Country ISO-4217 Currency name in english: %v\n", currencyJapan) // Yen 81 | fmt.Printf("Country ISO-4217 Currency digit code: %d\n", currencyJapan) // 392 82 | fmt.Printf("Country ISO-4217 Currency Alpha code: %v\n", currencyJapan.Alpha()) // JPY 83 | fmt.Printf("Country Currency emoji: %v\n", currencyJapan.Emoji()) // 💴 84 | fmt.Printf("Country of Currency %v: %v\n\n", currencyJapan, currencyJapan.Countries()) // Japan 85 | 86 | // OR you can alternative use: 87 | japanInfo := countries.Japan.Info() 88 | fmt.Printf("Country name in english: %v\n", japanInfo.Name) // Japan 89 | fmt.Printf("Country ISO-3166 digit code: %d\n", japanInfo.Code) // 392 90 | fmt.Printf("Country ISO-3166 Alpha-2 code: %v\n", japanInfo.Alpha2) // JP 91 | fmt.Printf("Country ISO-3166 Alpha-3 code: %v\n", japanInfo.Alpha3) // JPN 92 | fmt.Printf("Country IOC/NOC code: %v\n", japanInfo.IOC) // JPN 93 | fmt.Printf("Country FIFA code: %v\n", japanInfo.FIFA) // JPN 94 | fmt.Printf("Country FIPS code: %v\n", japanInfo.FIPS) // JA 95 | fmt.Printf("Country Capital: %v\n", japanInfo.Capital) // Tokyo 96 | fmt.Printf("Country ITU-T E.164 call code: %v\n", japanInfo.CallCodes) // +81 97 | fmt.Printf("Country ccTLD domain: %v\n", japanInfo.Domain) // .jp 98 | fmt.Printf("Country UN M.49 region name: %v\n", japanInfo.Region) // Asia 99 | fmt.Printf("Country UN M.49 region code: %d\n", japanInfo.Region) // 142 100 | fmt.Printf("Country emoji/flag: %v\n", japanInfo.Emoji) // 🇯🇵 101 | fmt.Printf("Country ISO-4217 Currency name in english: %v\n", japanInfo.Currency) // Yen 102 | fmt.Printf("Country ISO-4217 Currency digit code: %d\n", japanInfo.Currency) // 392 103 | fmt.Printf("Country ISO-4217 Currency Alpha code: %v\n", japanInfo.Currency.Alpha()) // JPY 104 | fmt.Printf("Country Subdivisions: %v\n", japanInfo.Subdivisions) // Hokkaido Aomori Iwate Miyagi Akita Yamagata Fukushima Ibaraki Tochigi Gunma Saitama Chiba Tokyo Kanagawa Niigata Toyama Ishikawa Fukui Yamanashi Nagano Gifu Shizuoka Aichi Mie Shiga Kyoto Osaka Hyogo Nara Wakayama Tottori Shimane Okayama Hiroshima Yamaguchi Tokushima Kagawa Ehime Kochi Fukuoka Saga Nagasaki Kumamoto Oita Miyazaki Kagoshima Okinawa 105 | 106 | // Detection/Lookup usage 107 | // Detect/Lookup by country name 108 | country := countries.ByName("angola") 109 | fmt.Printf("Country name in english: %v\n", country) // Angola 110 | fmt.Printf("Country ISO-3166 digit code: %d\n", country) // 24 111 | fmt.Printf("Country ISO-3166 Alpha-2 code: %v\n", country.Alpha2()) // AO 112 | fmt.Printf("Country ISO-3166 Alpha-3 code: %v\n", country.Alpha3()) // AGO 113 | // Detect/Lookup by country code 114 | country = countries.ByName("AO") 115 | fmt.Printf("Country name in english: %v\n", country.String()) // Angola 116 | fmt.Printf("Country ISO-3166 digit code: %d\n", country) // 24 117 | fmt.Printf("Country ISO-3166 Alpha-2 code: %v\n", country.Alpha2()) // AO 118 | fmt.Printf("Country ISO-3166 Alpha-3 code: %v\n", country.Alpha3()) // AGO 119 | // Detect/Lookup by code/numeric 120 | country = countries.ByNumeric(24) 121 | fmt.Printf("Country name in english: %v\n", country) // Angola 122 | fmt.Printf("Country ISO-3166 digit code: %d\n", country) // 24 123 | fmt.Printf("Country ISO-3166 Alpha-2 code: %v\n", country.Alpha2()) // AO 124 | fmt.Printf("Country ISO-3166 Alpha-3 code: %v\n", country.Alpha3()) // AGO 125 | 126 | // Comparing usage 127 | // Compare by code/numeric 128 | if countries.ByName("angola") == countries.AGO { 129 | fmt.Println("Yes! It's Angola!") // Yes! It's Angola! 130 | } 131 | // Compare by name 132 | if strings.EqualFold("angola", countries.AGO.String()) { 133 | fmt.Println("Yes! It's Angola!") // Yes! It's Angola! 134 | } 135 | 136 | // Database usage 137 | type User struct { 138 | gorm.Model 139 | Name string 140 | Country countries.CountryCode 141 | Currency countries.CurrencyCode 142 | } 143 | user := &User{Name: "Helen", Country: countries.Slovenia, Currency: countries.CurrencyEUR} 144 | db, err := gorm.Open("postgres", 500, "host=127.0.0.2 port=5432 user=usr password=1234567 dbname=db") 145 | if err != nil { 146 | panic(err) 147 | } 148 | defer db.Close() 149 | db.Create(user) 150 | ``` 151 | 152 | ## Options 153 | 154 | For Emoji use Emoji(). Enjoy! 155 | 156 | ```go 157 | import "github.com/biter777/countries" 158 | ``` 159 | 160 | For more complex options, consult the [documentation](http://godoc.org/github.com/biter777/countries). 161 | 162 | ## Contributing 163 | 164 | 1. **Welcome pull requests, bug fixes and issue reports** 165 | 166 | [Contributors list](https://github.com/biter777/countries/graphs/contributors) 167 | 168 | 2. **Donate** - a donation isn't necessary, but it's welcome. 169 | 170 | 171 | [![ko-fi](https://www.ko-fi.com/img/githubbutton_sm.svg)](https://ko-fi.com/I2I61D1XZ)
172 | 173 | 3. **Star us** - give us a star, please, if it's not against your religion :) 174 | 175 | 176 | [![Stars](https://img.shields.io/github/stars/biter777/countries?label=Please%20like%20us&style=social)](https://github.com/biter777/countries/stargazers) 177 | 178 | ## Updating ISO 3166 179 | 180 | Making use of changes to the [iso-codes](https://salsa.debian.org/iso-codes-team/iso-codes) project. 181 | 182 | **TODO** create go generate capability to automatically generate from the json files 183 | in the [data](https://salsa.debian.org/iso-codes-team/iso-codes/-/tree/main/data/) 184 | directory of the iso-codes project. 185 | -------------------------------------------------------------------------------- /callcodes.go: -------------------------------------------------------------------------------- 1 | package countries 2 | 3 | import ( 4 | "encoding/json" 5 | "fmt" 6 | "strconv" 7 | ) 8 | 9 | // CallCode - calling code of country 10 | type CallCode int64 // int64 for database/sql/driver.Valuer compatibility 11 | 12 | // CallCodeInfo - all info about CallCode 13 | type CallCodeInfo struct { 14 | Code CallCode 15 | Countries []CountryCode 16 | } 17 | 18 | // String - implements fmt.Stringer, returns a calling phone code in string, example for UK: "+44" 19 | func (c CallCode) String() string { 20 | return "+" + strconv.FormatInt(int64(c), 10) 21 | } 22 | 23 | // Type implements Typer interface 24 | func (_ CallCode) Type() string { 25 | return TypeCallCode 26 | } 27 | 28 | // Info - returns CallCodeInfo 29 | func (c CallCode) Info() *CallCodeInfo { 30 | return &CallCodeInfo{ 31 | Code: c, 32 | Countries: c.Countries(), 33 | } 34 | } 35 | 36 | // TotalCallCodes - returns number of call codes in the package, countries.TotalCallCodes() == len(countries.AllCallCodes()), but static value for performance 37 | func TotalCallCodes() int { 38 | return 264 39 | } 40 | 41 | // AllCallCodes - return all countries call phone codes 42 | func AllCallCodes() []CallCode { 43 | return []CallCode{ 44 | CallCodeUnknown, 45 | CallCode1, 46 | CallCode7, 47 | CallCode20, 48 | CallCode27, 49 | CallCode30, 50 | CallCode31, 51 | CallCode32, 52 | CallCode33, 53 | CallCode34, 54 | CallCode36, 55 | CallCode38, 56 | CallCode39, 57 | CallCode40, 58 | CallCode41, 59 | CallCode43, 60 | CallCode44, 61 | CallCode45, 62 | CallCode46, 63 | CallCode47, 64 | CallCode48, 65 | CallCode49, 66 | CallCode51, 67 | CallCode52, 68 | CallCode53, 69 | CallCode54, 70 | CallCode55, 71 | CallCode56, 72 | CallCode57, 73 | CallCode58, 74 | CallCode60, 75 | CallCode61, 76 | CallCode62, 77 | CallCode63, 78 | CallCode64, 79 | CallCode65, 80 | CallCode66, 81 | CallCode81, 82 | CallCode82, 83 | CallCode84, 84 | CallCode86, 85 | CallCode90, 86 | CallCode91, 87 | CallCode92, 88 | CallCode93, 89 | CallCode94, 90 | CallCode95, 91 | CallCode98, 92 | CallCode211, 93 | CallCode212, 94 | CallCode213, 95 | CallCode216, 96 | CallCode218, 97 | CallCode220, 98 | CallCode221, 99 | CallCode222, 100 | CallCode223, 101 | CallCode224, 102 | CallCode225, 103 | CallCode226, 104 | CallCode227, 105 | CallCode228, 106 | CallCode229, 107 | CallCode230, 108 | CallCode231, 109 | CallCode232, 110 | CallCode233, 111 | CallCode234, 112 | CallCode235, 113 | CallCode236, 114 | CallCode237, 115 | CallCode238, 116 | CallCode239, 117 | CallCode240, 118 | CallCode241, 119 | CallCode242, 120 | CallCode243, 121 | CallCode244, 122 | CallCode245, 123 | CallCode246, 124 | CallCode248, 125 | CallCode249, 126 | CallCode250, 127 | CallCode251, 128 | CallCode252, 129 | CallCode253, 130 | CallCode254, 131 | CallCode255, 132 | CallCode256, 133 | CallCode257, 134 | CallCode258, 135 | CallCode260, 136 | CallCode261, 137 | CallCode262, 138 | CallCode263, 139 | CallCode264, 140 | CallCode265, 141 | CallCode266, 142 | CallCode267, 143 | CallCode268, 144 | CallCode269, 145 | CallCode290, 146 | CallCode291, 147 | CallCode297, 148 | CallCode298, 149 | CallCode299, 150 | CallCode350, 151 | CallCode351, 152 | CallCode352, 153 | CallCode353, 154 | CallCode354, 155 | CallCode355, 156 | CallCode356, 157 | CallCode357, 158 | CallCode358, 159 | CallCode359, 160 | CallCode370, 161 | CallCode371, 162 | CallCode372, 163 | CallCode373, 164 | CallCode374, 165 | CallCode375, 166 | CallCode376, 167 | CallCode377, 168 | CallCode378, 169 | CallCode380, 170 | CallCode381, 171 | CallCode382, 172 | CallCode383, 173 | CallCode385, 174 | CallCode386, 175 | CallCode387, 176 | CallCode389, 177 | CallCode420, 178 | CallCode421, 179 | CallCode423, 180 | CallCode500, 181 | CallCode501, 182 | CallCode502, 183 | CallCode503, 184 | CallCode504, 185 | CallCode505, 186 | CallCode506, 187 | CallCode507, 188 | CallCode508, 189 | CallCode509, 190 | CallCode590, 191 | CallCode591, 192 | CallCode592, 193 | CallCode593, 194 | CallCode594, 195 | CallCode595, 196 | CallCode596, 197 | CallCode597, 198 | CallCode598, 199 | CallCode599, 200 | CallCode670, 201 | CallCode672, 202 | CallCode673, 203 | CallCode674, 204 | CallCode675, 205 | CallCode676, 206 | CallCode677, 207 | CallCode678, 208 | CallCode679, 209 | CallCode680, 210 | CallCode681, 211 | CallCode682, 212 | CallCode683, 213 | CallCode685, 214 | CallCode686, 215 | CallCode687, 216 | CallCode688, 217 | CallCode689, 218 | CallCode690, 219 | CallCode691, 220 | CallCode692, 221 | CallCode800, 222 | CallCode850, 223 | CallCode852, 224 | CallCode853, 225 | CallCode855, 226 | CallCode856, 227 | CallCode870, 228 | CallCode875, 229 | CallCode876, 230 | CallCode877, 231 | CallCode878, 232 | CallCode879, 233 | CallCode880, 234 | CallCode881, 235 | CallCode882, 236 | CallCode883, 237 | CallCode886, 238 | CallCode888, 239 | CallCode960, 240 | CallCode961, 241 | CallCode962, 242 | CallCode963, 243 | CallCode964, 244 | CallCode965, 245 | CallCode966, 246 | CallCode967, 247 | CallCode968, 248 | CallCode970, 249 | CallCode971, 250 | CallCode972, 251 | CallCode973, 252 | CallCode974, 253 | CallCode975, 254 | CallCode976, 255 | CallCode977, 256 | CallCode979, 257 | CallCode991, 258 | CallCode992, 259 | CallCode994, 260 | CallCode995, 261 | CallCode996, 262 | CallCode998, 263 | CallCode1242, 264 | CallCode1246, 265 | CallCode1264, 266 | CallCode1268, 267 | CallCode1284, 268 | CallCode1340, 269 | CallCode1345, 270 | CallCode1441, 271 | CallCode1473, 272 | CallCode1649, 273 | CallCode1658, 274 | CallCode1664, 275 | CallCode1670, 276 | CallCode1671, 277 | CallCode1684, 278 | CallCode1721, 279 | CallCode1758, 280 | CallCode1767, 281 | CallCode1784, 282 | CallCode1787, 283 | CallCode1808, 284 | CallCode1809, 285 | CallCode1829, 286 | CallCode1849, 287 | CallCode1868, 288 | CallCode1869, 289 | CallCode1876, 290 | CallCode1939, 291 | CallCode4779, 292 | CallCode5993, 293 | CallCode5994, 294 | CallCode5995, 295 | CallCode5997, 296 | CallCode5998, 297 | CallCode5999, 298 | CallCode993, 299 | CallCode35818, 300 | CallCode262269, 301 | CallCode262639, 302 | CallCode441481, 303 | CallCode441534, 304 | CallCode441624, 305 | CallCode3906698, 306 | CallCode6189162, 307 | CallCode6189164, 308 | } 309 | } 310 | 311 | // AllCallCodesInfo - return all countries call phone codes as []CallCodeInfo 312 | func AllCallCodesInfo() []*CallCodeInfo { 313 | all := AllCallCodes() 314 | codes := make([]*CallCodeInfo, 0, len(all)) 315 | for _, v := range all { 316 | codes = append(codes, v.Info()) 317 | } 318 | return codes 319 | } 320 | 321 | // Countries - returns CountryCodes of CallCode 322 | //nolint:gocyclo 323 | func (c CallCode) Countries() []CountryCode { //nolint:gocyclo 324 | switch c { 325 | case CallCode1: 326 | return []CountryCode{ATF, CAN, UMI, USA} 327 | case CallCode1808: 328 | return []CountryCode{USA} 329 | case CallCode1242: 330 | return []CountryCode{BHS} 331 | case CallCode1246: 332 | return []CountryCode{BRB} 333 | case CallCode1264: 334 | return []CountryCode{AIA} 335 | case CallCode1268: 336 | return []CountryCode{ATG} 337 | case CallCode1284: 338 | return []CountryCode{VGB} 339 | case CallCode1340: 340 | return []CountryCode{VIR} 341 | case CallCode1345: 342 | return []CountryCode{CYM} 343 | case CallCode1441: 344 | return []CountryCode{BMU} 345 | case CallCode1473: 346 | return []CountryCode{GRD} 347 | case CallCode1649: 348 | return []CountryCode{TCA} 349 | case CallCode1664: 350 | return []CountryCode{MSR} 351 | case CallCode1670: 352 | return []CountryCode{MNP} 353 | case CallCode1671: 354 | return []CountryCode{GUM} 355 | case CallCode1684: 356 | return []CountryCode{ASM} 357 | case CallCode1758: 358 | return []CountryCode{LCA} 359 | case CallCode1767: 360 | return []CountryCode{DMA} 361 | case CallCode1784: 362 | return []CountryCode{VCT} 363 | case CallCode1787, CallCode1939: 364 | return []CountryCode{PRI} 365 | case CallCode1809, CallCode1829, CallCode1849: 366 | return []CountryCode{DOM} 367 | case CallCode1868: 368 | return []CountryCode{TTO} 369 | case CallCode1869: 370 | return []CountryCode{KNA} 371 | case CallCode1876, CallCode1658: 372 | return []CountryCode{JAM} 373 | case CallCode20: 374 | return []CountryCode{EGY} 375 | case CallCode211: 376 | return []CountryCode{SSD} 377 | case CallCode212: 378 | return []CountryCode{ESH, MAR} 379 | case CallCode213: 380 | return []CountryCode{DZA} 381 | case CallCode216: 382 | return []CountryCode{TUN} 383 | case CallCode218: 384 | return []CountryCode{LBY} 385 | case CallCode220: 386 | return []CountryCode{GMB} 387 | case CallCode221: 388 | return []CountryCode{SEN} 389 | case CallCode222: 390 | return []CountryCode{MRT} 391 | case CallCode223: 392 | return []CountryCode{MLI} 393 | case CallCode224: 394 | return []CountryCode{GIN} 395 | case CallCode225: 396 | return []CountryCode{CIV} 397 | case CallCode226: 398 | return []CountryCode{BFA} 399 | case CallCode227: 400 | return []CountryCode{NER} 401 | case CallCode228: 402 | return []CountryCode{TGO} 403 | case CallCode229: 404 | return []CountryCode{BEN} 405 | case CallCode230: 406 | return []CountryCode{MUS} 407 | case CallCode231: 408 | return []CountryCode{LBR} 409 | case CallCode232: 410 | return []CountryCode{SLE} 411 | case CallCode233: 412 | return []CountryCode{GHA} 413 | case CallCode234: 414 | return []CountryCode{NGA} 415 | case CallCode235: 416 | return []CountryCode{TCD} 417 | case CallCode236: 418 | return []CountryCode{CAF} 419 | case CallCode237: 420 | return []CountryCode{CMR} 421 | case CallCode238: 422 | return []CountryCode{CPV} 423 | case CallCode239: 424 | return []CountryCode{STP} 425 | case CallCode240: 426 | return []CountryCode{GNQ} 427 | case CallCode241: 428 | return []CountryCode{GAB} 429 | case CallCode242: 430 | return []CountryCode{COG} 431 | case CallCode243: 432 | return []CountryCode{COD} 433 | case CallCode244: 434 | return []CountryCode{AGO} 435 | case CallCode245: 436 | return []CountryCode{GNB} 437 | case CallCode246: 438 | return []CountryCode{IOT} 439 | case CallCode248: 440 | return []CountryCode{SYC} 441 | case CallCode249: 442 | return []CountryCode{SDN} 443 | case CallCode250: 444 | return []CountryCode{RWA} 445 | case CallCode251: 446 | return []CountryCode{ETH} 447 | case CallCode252: 448 | return []CountryCode{SOM} 449 | case CallCode253: 450 | return []CountryCode{DJI} 451 | case CallCode254: 452 | return []CountryCode{KEN} 453 | case CallCode255: 454 | return []CountryCode{TZA} 455 | case CallCode256: 456 | return []CountryCode{UGA} 457 | case CallCode257: 458 | return []CountryCode{BDI} 459 | case CallCode258: 460 | return []CountryCode{MOZ} 461 | case CallCode260: 462 | return []CountryCode{ZMB} 463 | case CallCode261: 464 | return []CountryCode{MDG} 465 | case CallCode262: 466 | return []CountryCode{MYT, REU} 467 | case CallCode262269, CallCode262639: 468 | return []CountryCode{MYT} 469 | case CallCode263: 470 | return []CountryCode{ZWE} 471 | case CallCode264: 472 | return []CountryCode{NAM} 473 | case CallCode265: 474 | return []CountryCode{MWI} 475 | case CallCode266: 476 | return []CountryCode{LSO} 477 | case CallCode267: 478 | return []CountryCode{BWA} 479 | case CallCode268: 480 | return []CountryCode{SWZ} 481 | case CallCode269: 482 | return []CountryCode{COM} 483 | case CallCode27: 484 | return []CountryCode{ZAF} 485 | case CallCode290: 486 | return []CountryCode{SHN} 487 | case CallCode291: 488 | return []CountryCode{ERI} 489 | case CallCode297, CallCode5998: 490 | return []CountryCode{ABW} 491 | case CallCode298: 492 | return []CountryCode{FRO} 493 | case CallCode299: 494 | return []CountryCode{GRL} 495 | case CallCode30: 496 | return []CountryCode{GRC} 497 | case CallCode31: 498 | return []CountryCode{NLD} 499 | case CallCode32: 500 | return []CountryCode{BEL} 501 | case CallCode33: 502 | return []CountryCode{FRA} 503 | case CallCode34: 504 | return []CountryCode{ESP} 505 | case CallCode350: 506 | return []CountryCode{GIB} 507 | case CallCode351: 508 | return []CountryCode{PRT} 509 | case CallCode352: 510 | return []CountryCode{LUX} 511 | case CallCode353: 512 | return []CountryCode{IRL} 513 | case CallCode354: 514 | return []CountryCode{ISL} 515 | case CallCode355: 516 | return []CountryCode{ALB} 517 | case CallCode356: 518 | return []CountryCode{MLT} 519 | case CallCode357: 520 | return []CountryCode{CYP} 521 | case CallCode358: 522 | return []CountryCode{ALA, FIN} 523 | case CallCode359: 524 | return []CountryCode{BGR} 525 | case CallCode36: 526 | return []CountryCode{HUN} 527 | case CallCode370: 528 | return []CountryCode{LTU} 529 | case CallCode371: 530 | return []CountryCode{LVA} 531 | case CallCode372: 532 | return []CountryCode{EST} 533 | case CallCode373: 534 | return []CountryCode{MDA} 535 | case CallCode374: 536 | return []CountryCode{ARM} 537 | case CallCode375: 538 | return []CountryCode{BLR} 539 | case CallCode376: 540 | return []CountryCode{AND} 541 | case CallCode377: 542 | return []CountryCode{MCO} 543 | case CallCode378: 544 | return []CountryCode{SMR} 545 | case CallCode38: 546 | return []CountryCode{YUG} 547 | case CallCode380: 548 | return []CountryCode{UKR} 549 | case CallCode381: 550 | return []CountryCode{SRB} 551 | case CallCode382: 552 | return []CountryCode{MNE} 553 | case CallCode383: 554 | return []CountryCode{XKX} 555 | case CallCode385: 556 | return []CountryCode{HRV} 557 | case CallCode386: 558 | return []CountryCode{SVN} 559 | case CallCode387: 560 | return []CountryCode{BIH} 561 | case CallCode389: 562 | return []CountryCode{MKD} 563 | case CallCode39: 564 | return []CountryCode{ITA, VAT} 565 | case CallCode40: 566 | return []CountryCode{ROU} 567 | case CallCode41: 568 | return []CountryCode{CHE} 569 | case CallCode420: 570 | return []CountryCode{CZE} 571 | case CallCode421: 572 | return []CountryCode{SVK} 573 | case CallCode423: 574 | return []CountryCode{LIE} 575 | case CallCode43: 576 | return []CountryCode{AUT} 577 | case CallCode44: 578 | return []CountryCode{GBR, GGY, IMN, JEY, XSC, XWA} 579 | case CallCode45: 580 | return []CountryCode{DNK} 581 | case CallCode46: 582 | return []CountryCode{SWE} 583 | case CallCode47: 584 | return []CountryCode{BVT, NOR, SJM} 585 | case CallCode48: 586 | return []CountryCode{POL} 587 | case CallCode49: 588 | return []CountryCode{DEU} 589 | case CallCode500: 590 | return []CountryCode{FLK, SGS} 591 | case CallCode501: 592 | return []CountryCode{BLZ} 593 | case CallCode502: 594 | return []CountryCode{GTM} 595 | case CallCode503: 596 | return []CountryCode{SLV} 597 | case CallCode504: 598 | return []CountryCode{HND} 599 | case CallCode505: 600 | return []CountryCode{NIC} 601 | case CallCode506: 602 | return []CountryCode{CRI} 603 | case CallCode507: 604 | return []CountryCode{PAN} 605 | case CallCode508: 606 | return []CountryCode{SPM} 607 | case CallCode509: 608 | return []CountryCode{HTI} 609 | case CallCode51: 610 | return []CountryCode{PER} 611 | case CallCode52: 612 | return []CountryCode{MEX} 613 | case CallCode53: 614 | return []CountryCode{CUB} 615 | case CallCode54: 616 | return []CountryCode{ARG} 617 | case CallCode55: 618 | return []CountryCode{BRA} 619 | case CallCode56: 620 | return []CountryCode{CHL} 621 | case CallCode57: 622 | return []CountryCode{COL} 623 | case CallCode58: 624 | return []CountryCode{VEN} 625 | case CallCode590: 626 | return []CountryCode{BLM, GLP, MAF} 627 | case CallCode591: 628 | return []CountryCode{BOL} 629 | case CallCode592: 630 | return []CountryCode{GUY} 631 | case CallCode593: 632 | return []CountryCode{ECU} 633 | case CallCode594: 634 | return []CountryCode{GUF} 635 | case CallCode595: 636 | return []CountryCode{PRY} 637 | case CallCode596: 638 | return []CountryCode{MTQ} 639 | case CallCode597: 640 | return []CountryCode{SUR} 641 | case CallCode598: 642 | return []CountryCode{URY} 643 | case CallCode599: 644 | return []CountryCode{ANT, BES, CUW} 645 | case CallCode60: 646 | return []CountryCode{MYS} 647 | case CallCode61: 648 | return []CountryCode{AUS, CXR, CCK} 649 | case CallCode62: 650 | return []CountryCode{IDN} 651 | case CallCode63: 652 | return []CountryCode{PHL} 653 | case CallCode64: 654 | return []CountryCode{NZL, PCN} 655 | case CallCode65: 656 | return []CountryCode{SGP} 657 | case CallCode66: 658 | return []CountryCode{THA} 659 | case CallCode670: 660 | return []CountryCode{TLS} 661 | case CallCode672: 662 | return []CountryCode{ATA, CCK, NFK} 663 | case CallCode673: 664 | return []CountryCode{BRN} 665 | case CallCode674: 666 | return []CountryCode{NRU} 667 | case CallCode675: 668 | return []CountryCode{PNG} 669 | case CallCode676: 670 | return []CountryCode{TON} 671 | case CallCode677: 672 | return []CountryCode{SLB} 673 | case CallCode678: 674 | return []CountryCode{VUT} 675 | case CallCode679: 676 | return []CountryCode{FJI} 677 | case CallCode680: 678 | return []CountryCode{PLW} 679 | case CallCode681: 680 | return []CountryCode{WLF} 681 | case CallCode682: 682 | return []CountryCode{COK} 683 | case CallCode683: 684 | return []CountryCode{NIU} 685 | case CallCode685: 686 | return []CountryCode{WSM} 687 | case CallCode686: 688 | return []CountryCode{KIR} 689 | case CallCode687: 690 | return []CountryCode{NCL} 691 | case CallCode688: 692 | return []CountryCode{TUV} 693 | case CallCode689: 694 | return []CountryCode{PYF} 695 | case CallCode690: 696 | return []CountryCode{TKL} 697 | case CallCode691: 698 | return []CountryCode{FSM} 699 | case CallCode692: 700 | return []CountryCode{MHL} 701 | case CallCode7: 702 | return []CountryCode{KAZ, RUS} 703 | case CallCode1721, CallCode5995: 704 | return []CountryCode{SXM} 705 | case CallCode4779: 706 | return []CountryCode{SJM} 707 | case CallCode5993, CallCode5994, CallCode5997: 708 | return []CountryCode{BES} 709 | case CallCode993: 710 | return []CountryCode{TKM} 711 | case CallCode81: 712 | return []CountryCode{JPN} 713 | case CallCode82: 714 | return []CountryCode{KOR} 715 | case CallCode84: 716 | return []CountryCode{VNM} 717 | case CallCode850: 718 | return []CountryCode{PRK} 719 | case CallCode852: 720 | return []CountryCode{HKG} 721 | case CallCode853: 722 | return []CountryCode{MAC} 723 | case CallCode855: 724 | return []CountryCode{KHM} 725 | case CallCode856: 726 | return []CountryCode{LAO} 727 | case CallCode86: 728 | return []CountryCode{CHN} 729 | case CallCode800: 730 | return []CountryCode{NonCountryInternationalFreephone} 731 | case CallCode870: 732 | return []CountryCode{NonCountryInmarsat} 733 | case CallCode875, CallCode876, CallCode877: 734 | return []CountryCode{NonCountryMaritimeMobileService} 735 | case CallCode878: 736 | return []CountryCode{NonCountryUniversalPersonalTelecommunicationsServices} 737 | case CallCode879: 738 | return []CountryCode{NonCountryNationalNonCommercialPurposes} 739 | case CallCode880: 740 | return []CountryCode{BGD} 741 | case CallCode881: 742 | return []CountryCode{NonCountryGlobalMobileSatelliteSystem} 743 | case CallCode882, CallCode883: 744 | return []CountryCode{NonCountryInternationalNetworks} 745 | case CallCode886: 746 | return []CountryCode{TWN} 747 | case CallCode90: 748 | return []CountryCode{TUR} 749 | case CallCode91: 750 | return []CountryCode{IND} 751 | case CallCode92: 752 | return []CountryCode{PAK} 753 | case CallCode93: 754 | return []CountryCode{AFG} 755 | case CallCode94: 756 | return []CountryCode{LKA} 757 | case CallCode95: 758 | return []CountryCode{MMR} 759 | case CallCode888: 760 | return []CountryCode{NonCountryDisasterRelief} 761 | case CallCode960: 762 | return []CountryCode{MDV} 763 | case CallCode961: 764 | return []CountryCode{LBN} 765 | case CallCode962: 766 | return []CountryCode{JOR} 767 | case CallCode963: 768 | return []CountryCode{SYR} 769 | case CallCode964: 770 | return []CountryCode{IRQ} 771 | case CallCode965: 772 | return []CountryCode{KWT} 773 | case CallCode966: 774 | return []CountryCode{SAU} 775 | case CallCode967: 776 | return []CountryCode{YEM} 777 | case CallCode968: 778 | return []CountryCode{OMN} 779 | case CallCode970: 780 | return []CountryCode{PSE} 781 | case CallCode971: 782 | return []CountryCode{ARE} 783 | case CallCode972: 784 | return []CountryCode{PSE} 785 | case CallCode973: 786 | return []CountryCode{BHR} 787 | case CallCode974: 788 | return []CountryCode{QAT} 789 | case CallCode975: 790 | return []CountryCode{BTN} 791 | case CallCode976: 792 | return []CountryCode{MNG} 793 | case CallCode977: 794 | return []CountryCode{NPL} 795 | case CallCode98: 796 | return []CountryCode{IRN} 797 | case CallCode979: 798 | return []CountryCode{NonCountryInternationalPremiumRateService} 799 | case CallCode991: 800 | return []CountryCode{NonCountryInternationalTelecommunicationsCorrespondenceService} 801 | case CallCode992: 802 | return []CountryCode{TJK} 803 | case CallCode994: 804 | return []CountryCode{AZE} 805 | case CallCode995: 806 | return []CountryCode{GEO} 807 | case CallCode996: 808 | return []CountryCode{KGZ} 809 | case CallCode998: 810 | return []CountryCode{UZB} 811 | case CallCode5999: 812 | return []CountryCode{CUW} 813 | case CallCode35818: 814 | return []CountryCode{ALA} 815 | case CallCode441481: 816 | return []CountryCode{GGY} 817 | case CallCode441534: 818 | return []CountryCode{JEY} 819 | case CallCode441624: 820 | return []CountryCode{IMN} 821 | case CallCode3906698: 822 | return []CountryCode{VAT} 823 | case CallCode6189162: 824 | return []CountryCode{CCK} 825 | case CallCode6189164: 826 | return []CountryCode{CXR} 827 | } 828 | return []CountryCode{Unknown} 829 | } 830 | 831 | // IsValid - returns true, if code is correct 832 | func (c CallCode) IsValid() bool { 833 | return c.Countries()[0] != Unknown 834 | } 835 | 836 | // Type implements Typer interface 837 | func (_ *CallCodeInfo) Type() string { 838 | return TypeCallCodeInfo 839 | } 840 | 841 | // Value implements database/sql/driver.Valuer 842 | func (c CallCodeInfo) Value() (Value, error) { 843 | return json.Marshal(c) 844 | } 845 | 846 | // Scan implements database/sql.Scanner 847 | func (c *CallCodeInfo) Scan(src interface{}) error { 848 | if c == nil { 849 | return fmt.Errorf("countries::Scan: CallCodeInfo scan err: callCodeInfo == nil") 850 | } 851 | switch src := src.(type) { 852 | case *CallCodeInfo: 853 | *c = *src 854 | case CallCodeInfo: 855 | *c = src 856 | default: 857 | return fmt.Errorf("countries::Scan: CallCodeInfo scan err: unexpected value of type %T for %T", src, *c) 858 | } 859 | return nil 860 | } 861 | -------------------------------------------------------------------------------- /callcodesconst.go: -------------------------------------------------------------------------------- 1 | package countries 2 | 3 | // TypeCallCode for Typer interface 4 | const TypeCallCode string = "countries.CallCode" 5 | 6 | // TypeCallCodeInfo for Typer interface 7 | const TypeCallCodeInfo string = "countries.CallCodeInfo" 8 | 9 | const ( 10 | // CallCodeUnknown CallCode = 0 11 | CallCodeUnknown CallCode = 0 12 | // CallCode1 CallCode = 1 13 | CallCode1 CallCode = 1 14 | // CallCode7 CallCode = 7 15 | CallCode7 CallCode = 7 16 | // CallCode20 CallCode = 20 17 | CallCode20 CallCode = 20 18 | // CallCode27 CallCode = 27 19 | CallCode27 CallCode = 27 20 | // CallCode30 CallCode = 30 21 | CallCode30 CallCode = 30 22 | // CallCode31 CallCode = 31 23 | CallCode31 CallCode = 31 24 | // CallCode32 CallCode = 32 25 | CallCode32 CallCode = 32 26 | // CallCode33 CallCode = 33 27 | CallCode33 CallCode = 33 28 | // CallCode34 CallCode = 34 29 | CallCode34 CallCode = 34 30 | // CallCode36 CallCode = 36 31 | CallCode36 CallCode = 36 32 | // CallCode38 CallCode = 38 33 | CallCode38 CallCode = 38 34 | // CallCode39 CallCode = 39 35 | CallCode39 CallCode = 39 36 | // CallCode40 CallCode = 40 37 | CallCode40 CallCode = 40 38 | // CallCode41 CallCode = 41 39 | CallCode41 CallCode = 41 40 | // CallCode43 CallCode = 43 41 | CallCode43 CallCode = 43 42 | // CallCode44 CallCode = 44 43 | CallCode44 CallCode = 44 44 | // CallCode45 CallCode = 45 45 | CallCode45 CallCode = 45 46 | // CallCode46 CallCode = 46 47 | CallCode46 CallCode = 46 48 | // CallCode47 CallCode = 47 49 | CallCode47 CallCode = 47 50 | // CallCode48 CallCode = 48 51 | CallCode48 CallCode = 48 52 | // CallCode49 CallCode = 49 53 | CallCode49 CallCode = 49 54 | // CallCode51 CallCode = 51 55 | CallCode51 CallCode = 51 56 | // CallCode52 CallCode = 52 57 | CallCode52 CallCode = 52 58 | // CallCode53 CallCode = 53 59 | CallCode53 CallCode = 53 60 | // CallCode54 CallCode = 54 61 | CallCode54 CallCode = 54 62 | // CallCode55 CallCode = 55 63 | CallCode55 CallCode = 55 64 | // CallCode56 CallCode = 56 65 | CallCode56 CallCode = 56 66 | // CallCode57 CallCode = 57 67 | CallCode57 CallCode = 57 68 | // CallCode58 CallCode = 58 69 | CallCode58 CallCode = 58 70 | // CallCode60 CallCode = 60 71 | CallCode60 CallCode = 60 72 | // CallCode61 CallCode = 61 73 | CallCode61 CallCode = 61 74 | // CallCode62 CallCode = 62 75 | CallCode62 CallCode = 62 76 | // CallCode63 CallCode = 63 77 | CallCode63 CallCode = 63 78 | // CallCode64 CallCode = 64 79 | CallCode64 CallCode = 64 80 | // CallCode65 CallCode = 65 81 | CallCode65 CallCode = 65 82 | // CallCode66 CallCode = 66 83 | CallCode66 CallCode = 66 84 | // CallCode81 CallCode = 81 85 | CallCode81 CallCode = 81 86 | // CallCode82 CallCode = 82 87 | CallCode82 CallCode = 82 88 | // CallCode84 CallCode = 84 89 | CallCode84 CallCode = 84 90 | // CallCode86 CallCode = 86 91 | CallCode86 CallCode = 86 92 | // CallCode90 CallCode = 90 93 | CallCode90 CallCode = 90 94 | // CallCode91 CallCode = 91 95 | CallCode91 CallCode = 91 96 | // CallCode92 CallCode = 92 97 | CallCode92 CallCode = 92 98 | // CallCode93 CallCode = 93 99 | CallCode93 CallCode = 93 100 | // CallCode94 CallCode = 94 101 | CallCode94 CallCode = 94 102 | // CallCode95 CallCode = 95 103 | CallCode95 CallCode = 95 104 | // CallCode98 CallCode = 98 105 | CallCode98 CallCode = 98 106 | // CallCode211 CallCode = 211 107 | CallCode211 CallCode = 211 108 | // CallCode212 CallCode = 212 109 | CallCode212 CallCode = 212 110 | // CallCode213 CallCode = 213 111 | CallCode213 CallCode = 213 112 | // CallCode216 CallCode = 216 113 | CallCode216 CallCode = 216 114 | // CallCode218 CallCode = 218 115 | CallCode218 CallCode = 218 116 | // CallCode220 CallCode = 220 117 | CallCode220 CallCode = 220 118 | // CallCode221 CallCode = 221 119 | CallCode221 CallCode = 221 120 | // CallCode222 CallCode = 222 121 | CallCode222 CallCode = 222 122 | // CallCode223 CallCode = 223 123 | CallCode223 CallCode = 223 124 | // CallCode224 CallCode = 224 125 | CallCode224 CallCode = 224 126 | // CallCode225 CallCode = 225 127 | CallCode225 CallCode = 225 128 | // CallCode226 CallCode = 226 129 | CallCode226 CallCode = 226 130 | // CallCode227 CallCode = 227 131 | CallCode227 CallCode = 227 132 | // CallCode228 CallCode = 228 133 | CallCode228 CallCode = 228 134 | // CallCode229 CallCode = 229 135 | CallCode229 CallCode = 229 136 | // CallCode230 CallCode = 230 137 | CallCode230 CallCode = 230 138 | // CallCode231 CallCode = 231 139 | CallCode231 CallCode = 231 140 | // CallCode232 CallCode = 232 141 | CallCode232 CallCode = 232 142 | // CallCode233 CallCode = 233 143 | CallCode233 CallCode = 233 144 | // CallCode234 CallCode = 234 145 | CallCode234 CallCode = 234 146 | // CallCode235 CallCode = 235 147 | CallCode235 CallCode = 235 148 | // CallCode236 CallCode = 236 149 | CallCode236 CallCode = 236 150 | // CallCode237 CallCode = 237 151 | CallCode237 CallCode = 237 152 | // CallCode238 CallCode = 238 153 | CallCode238 CallCode = 238 154 | // CallCode239 CallCode = 239 155 | CallCode239 CallCode = 239 156 | // CallCode240 CallCode = 240 157 | CallCode240 CallCode = 240 158 | // CallCode241 CallCode = 241 159 | CallCode241 CallCode = 241 160 | // CallCode242 CallCode = 242 161 | CallCode242 CallCode = 242 162 | // CallCode243 CallCode = 243 163 | CallCode243 CallCode = 243 164 | // CallCode244 CallCode = 244 165 | CallCode244 CallCode = 244 166 | // CallCode245 CallCode = 245 167 | CallCode245 CallCode = 245 168 | // CallCode246 CallCode = 246 169 | CallCode246 CallCode = 246 170 | // CallCode248 CallCode = 248 171 | CallCode248 CallCode = 248 172 | // CallCode249 CallCode = 249 173 | CallCode249 CallCode = 249 174 | // CallCode250 CallCode = 250 175 | CallCode250 CallCode = 250 176 | // CallCode251 CallCode = 251 177 | CallCode251 CallCode = 251 178 | // CallCode252 CallCode = 252 179 | CallCode252 CallCode = 252 180 | // CallCode253 CallCode = 253 181 | CallCode253 CallCode = 253 182 | // CallCode254 CallCode = 254 183 | CallCode254 CallCode = 254 184 | // CallCode255 CallCode = 255 185 | CallCode255 CallCode = 255 186 | // CallCode256 CallCode = 256 187 | CallCode256 CallCode = 256 188 | // CallCode257 CallCode = 257 189 | CallCode257 CallCode = 257 190 | // CallCode258 CallCode = 258 191 | CallCode258 CallCode = 258 192 | // CallCode260 CallCode = 260 193 | CallCode260 CallCode = 260 194 | // CallCode261 CallCode = 261 195 | CallCode261 CallCode = 261 196 | // CallCode262 CallCode = 262 197 | CallCode262 CallCode = 262 198 | // CallCode263 CallCode = 263 199 | CallCode263 CallCode = 263 200 | // CallCode264 CallCode = 264 201 | CallCode264 CallCode = 264 202 | // CallCode265 CallCode = 265 203 | CallCode265 CallCode = 265 204 | // CallCode266 CallCode = 266 205 | CallCode266 CallCode = 266 206 | // CallCode267 CallCode = 267 207 | CallCode267 CallCode = 267 208 | // CallCode268 CallCode = 268 209 | CallCode268 CallCode = 268 210 | // CallCode269 CallCode = 269 211 | CallCode269 CallCode = 269 212 | // CallCode290 CallCode = 290 213 | CallCode290 CallCode = 290 214 | // CallCode291 CallCode = 291 215 | CallCode291 CallCode = 291 216 | // CallCode297 CallCode = 297 217 | CallCode297 CallCode = 297 218 | // CallCode298 CallCode = 298 219 | CallCode298 CallCode = 298 220 | // CallCode299 CallCode = 299 221 | CallCode299 CallCode = 299 222 | // CallCode350 CallCode = 350 223 | CallCode350 CallCode = 350 224 | // CallCode351 CallCode = 351 225 | CallCode351 CallCode = 351 226 | // CallCode352 CallCode = 352 227 | CallCode352 CallCode = 352 228 | // CallCode353 CallCode = 353 229 | CallCode353 CallCode = 353 230 | // CallCode354 CallCode = 354 231 | CallCode354 CallCode = 354 232 | // CallCode355 CallCode = 355 233 | CallCode355 CallCode = 355 234 | // CallCode356 CallCode = 356 235 | CallCode356 CallCode = 356 236 | // CallCode357 CallCode = 357 237 | CallCode357 CallCode = 357 238 | // CallCode358 CallCode = 358 239 | CallCode358 CallCode = 358 240 | // CallCode359 CallCode = 359 241 | CallCode359 CallCode = 359 242 | // CallCode370 CallCode = 370 243 | CallCode370 CallCode = 370 244 | // CallCode371 CallCode = 371 245 | CallCode371 CallCode = 371 246 | // CallCode372 CallCode = 372 247 | CallCode372 CallCode = 372 248 | // CallCode373 CallCode = 373 249 | CallCode373 CallCode = 373 250 | // CallCode374 CallCode = 374 251 | CallCode374 CallCode = 374 252 | // CallCode375 CallCode = 375 253 | CallCode375 CallCode = 375 254 | // CallCode376 CallCode = 376 255 | CallCode376 CallCode = 376 256 | // CallCode377 CallCode = 377 257 | CallCode377 CallCode = 377 258 | // CallCode378 CallCode = 378 259 | CallCode378 CallCode = 378 260 | // CallCode380 CallCode = 380 261 | CallCode380 CallCode = 380 262 | // CallCode381 CallCode = 381 263 | CallCode381 CallCode = 381 264 | // CallCode382 CallCode = 382 265 | CallCode382 CallCode = 382 266 | // CallCode383 CallCode = 383 267 | CallCode383 CallCode = 383 268 | // CallCode385 CallCode = 385 269 | CallCode385 CallCode = 385 270 | // CallCode386 CallCode = 386 271 | CallCode386 CallCode = 386 272 | // CallCode387 CallCode = 387 273 | CallCode387 CallCode = 387 274 | // CallCode389 CallCode = 389 275 | CallCode389 CallCode = 389 276 | // CallCode420 CallCode = 420 277 | CallCode420 CallCode = 420 278 | // CallCode421 CallCode = 421 279 | CallCode421 CallCode = 421 280 | // CallCode423 CallCode = 423 281 | CallCode423 CallCode = 423 282 | // CallCode500 CallCode = 500 283 | CallCode500 CallCode = 500 284 | // CallCode501 CallCode = 501 285 | CallCode501 CallCode = 501 286 | // CallCode502 CallCode = 502 287 | CallCode502 CallCode = 502 288 | // CallCode503 CallCode = 503 289 | CallCode503 CallCode = 503 290 | // CallCode504 CallCode = 504 291 | CallCode504 CallCode = 504 292 | // CallCode505 CallCode = 505 293 | CallCode505 CallCode = 505 294 | // CallCode506 CallCode = 506 295 | CallCode506 CallCode = 506 296 | // CallCode507 CallCode = 507 297 | CallCode507 CallCode = 507 298 | // CallCode508 CallCode = 508 299 | CallCode508 CallCode = 508 300 | // CallCode509 CallCode = 509 301 | CallCode509 CallCode = 509 302 | // CallCode590 CallCode = 590 303 | CallCode590 CallCode = 590 304 | // CallCode591 CallCode = 591 305 | CallCode591 CallCode = 591 306 | // CallCode592 CallCode = 592 307 | CallCode592 CallCode = 592 308 | // CallCode593 CallCode = 593 309 | CallCode593 CallCode = 593 310 | // CallCode594 CallCode = 594 311 | CallCode594 CallCode = 594 312 | // CallCode595 CallCode = 595 313 | CallCode595 CallCode = 595 314 | // CallCode596 CallCode = 596 315 | CallCode596 CallCode = 596 316 | // CallCode597 CallCode = 597 317 | CallCode597 CallCode = 597 318 | // CallCode598 CallCode = 598 319 | CallCode598 CallCode = 598 320 | // CallCode599 CallCode = 599 321 | CallCode599 CallCode = 599 322 | // CallCode670 CallCode = 670 323 | CallCode670 CallCode = 670 324 | // CallCode672 CallCode = 672 325 | CallCode672 CallCode = 672 326 | // CallCode673 CallCode = 673 327 | CallCode673 CallCode = 673 328 | // CallCode674 CallCode = 674 329 | CallCode674 CallCode = 674 330 | // CallCode675 CallCode = 675 331 | CallCode675 CallCode = 675 332 | // CallCode676 CallCode = 676 333 | CallCode676 CallCode = 676 334 | // CallCode677 CallCode = 677 335 | CallCode677 CallCode = 677 336 | // CallCode678 CallCode = 678 337 | CallCode678 CallCode = 678 338 | // CallCode679 CallCode = 679 339 | CallCode679 CallCode = 679 340 | // CallCode680 CallCode = 680 341 | CallCode680 CallCode = 680 342 | // CallCode681 CallCode = 681 343 | CallCode681 CallCode = 681 344 | // CallCode682 CallCode = 682 345 | CallCode682 CallCode = 682 346 | // CallCode683 CallCode = 683 347 | CallCode683 CallCode = 683 348 | // CallCode685 CallCode = 684 349 | CallCode685 CallCode = 685 350 | // CallCode686 CallCode = 686 351 | CallCode686 CallCode = 686 352 | // CallCode687 CallCode = 687 353 | CallCode687 CallCode = 687 354 | // CallCode688 CallCode = 688 355 | CallCode688 CallCode = 688 356 | // CallCode689 CallCode = 689 357 | CallCode689 CallCode = 689 358 | // CallCode690 CallCode = 690 359 | CallCode690 CallCode = 690 360 | // CallCode691 CallCode = 691 361 | CallCode691 CallCode = 691 362 | // CallCode692 CallCode = 692 363 | CallCode692 CallCode = 692 364 | // CallCode800 CallCode = 800 365 | CallCode800 CallCode = 800 366 | // CallCode850 CallCode = 850 367 | CallCode850 CallCode = 850 368 | // CallCode852 CallCode = 852 369 | CallCode852 CallCode = 852 370 | // CallCode853 CallCode = 853 371 | CallCode853 CallCode = 853 372 | // CallCode855 CallCode = 855 373 | CallCode855 CallCode = 855 374 | // CallCode856 CallCode = 856 375 | CallCode856 CallCode = 856 376 | // CallCode870 CallCode = 870 377 | CallCode870 CallCode = 870 378 | // CallCode875 CallCode = 875 379 | CallCode875 CallCode = 875 380 | // CallCode876 CallCode = 876 381 | CallCode876 CallCode = 876 382 | // CallCode877 CallCode = 877 383 | CallCode877 CallCode = 877 384 | // CallCode878 CallCode = 878 385 | CallCode878 CallCode = 878 386 | // CallCode879 CallCode = 879 387 | CallCode879 CallCode = 879 388 | // CallCode880 CallCode = 880 389 | CallCode880 CallCode = 880 390 | // CallCode881 CallCode = 881 391 | CallCode881 CallCode = 881 392 | // CallCode882 CallCode = 882 393 | CallCode882 CallCode = 882 394 | // CallCode883 CallCode = 883 395 | CallCode883 CallCode = 883 396 | // CallCode886 CallCode = 886 397 | CallCode886 CallCode = 886 398 | // CallCode888 CallCode = 888 399 | CallCode888 CallCode = 888 400 | // CallCode960 CallCode = 960 401 | CallCode960 CallCode = 960 402 | // CallCode961 CallCode = 961 403 | CallCode961 CallCode = 961 404 | // CallCode962 CallCode = 962 405 | CallCode962 CallCode = 962 406 | // CallCode963 CallCode = 963 407 | CallCode963 CallCode = 963 408 | // CallCode964 CallCode = 964 409 | CallCode964 CallCode = 964 410 | // CallCode965 CallCode = 965 411 | CallCode965 CallCode = 965 412 | // CallCode966 CallCode = 966 413 | CallCode966 CallCode = 966 414 | // CallCode967 CallCode = 967 415 | CallCode967 CallCode = 967 416 | // CallCode968 CallCode = 968 417 | CallCode968 CallCode = 968 418 | // CallCode970 CallCode = 970 419 | CallCode970 CallCode = 970 420 | // CallCode971 CallCode = 971 421 | CallCode971 CallCode = 971 422 | // CallCode972 CallCode = 972 423 | CallCode972 CallCode = 972 424 | // CallCode973 CallCode = 973 425 | CallCode973 CallCode = 973 426 | // CallCode974 CallCode = 974 427 | CallCode974 CallCode = 974 428 | // CallCode975 CallCode = 975 429 | CallCode975 CallCode = 975 430 | // CallCode976 CallCode = 976 431 | CallCode976 CallCode = 976 432 | // CallCode977 CallCode = 977 433 | CallCode977 CallCode = 977 434 | // CallCode979 CallCode = 979 435 | CallCode979 CallCode = 979 436 | // CallCode991 CallCode = 991 437 | CallCode991 CallCode = 991 438 | // CallCode992 CallCode = 992 439 | CallCode992 CallCode = 992 440 | // CallCode994 CallCode = 994 441 | CallCode994 CallCode = 994 442 | // CallCode995 CallCode = 995 443 | CallCode995 CallCode = 995 444 | // CallCode996 CallCode = 996 445 | CallCode996 CallCode = 996 446 | // CallCode998 CallCode = 998 447 | CallCode998 CallCode = 998 448 | // CallCode1242 CallCode = 1242 449 | CallCode1242 CallCode = 1242 450 | // CallCode1246 CallCode = 1246 451 | CallCode1246 CallCode = 1246 452 | // CallCode1264 CallCode = 1264 453 | CallCode1264 CallCode = 1264 454 | // CallCode1268 CallCode = 1268 455 | CallCode1268 CallCode = 1268 456 | // CallCode1284 CallCode = 1284 457 | CallCode1284 CallCode = 1284 458 | // CallCode1340 CallCode = 1340 459 | CallCode1340 CallCode = 1340 460 | // CallCode1345 CallCode = 1345 461 | CallCode1345 CallCode = 1345 462 | // CallCode1441 CallCode = 1441 463 | CallCode1441 CallCode = 1441 464 | // CallCode1473 CallCode = 1473 465 | CallCode1473 CallCode = 1473 466 | // CallCode1649 CallCode = 1649 467 | CallCode1649 CallCode = 1649 468 | // CallCode1658 CallCode = 1658 469 | CallCode1658 CallCode = 1658 470 | // CallCode1664 CallCode = 1664 471 | CallCode1664 CallCode = 1664 472 | // CallCode1670 CallCode = 1670 473 | CallCode1670 CallCode = 1670 474 | // CallCode1671 CallCode = 1671 475 | CallCode1671 CallCode = 1671 476 | // CallCode1684 CallCode = 1684 477 | CallCode1684 CallCode = 1684 478 | // CallCode1721 CallCode = 1721 479 | CallCode1721 CallCode = 1721 480 | // CallCode1758 CallCode = 1758 481 | CallCode1758 CallCode = 1758 482 | // CallCode1767 CallCode = 1767 483 | CallCode1767 CallCode = 1767 484 | // CallCode1784 CallCode = 1784 485 | CallCode1784 CallCode = 1784 486 | // CallCode1787 CallCode = 1787 487 | CallCode1787 CallCode = 1787 488 | // CallCode1808 CallCode = 1808 489 | CallCode1808 CallCode = 1808 490 | // CallCode1809 CallCode = 1809 491 | CallCode1809 CallCode = 1809 492 | // CallCode1829 CallCode = 1829 493 | CallCode1829 CallCode = 1829 494 | // CallCode1849 CallCode = 1849 495 | CallCode1849 CallCode = 1849 496 | // CallCode1868 CallCode = 1868 497 | CallCode1868 CallCode = 1868 498 | // CallCode1869 CallCode = 1869 499 | CallCode1869 CallCode = 1869 500 | // CallCode1876 CallCode = 1876 501 | CallCode1876 CallCode = 1876 502 | // CallCode1939 CallCode = 1939 503 | CallCode1939 CallCode = 1939 504 | // CallCode4779 CallCode = 4779 505 | CallCode4779 CallCode = 4779 506 | // CallCode5993 CallCode = 5993 507 | CallCode5993 CallCode = 5993 508 | // CallCode5994 CallCode = 5994 509 | CallCode5994 CallCode = 5994 510 | // CallCode5995 CallCode = 5995 511 | CallCode5995 CallCode = 5995 512 | // CallCode5997 CallCode = 5997 513 | CallCode5997 CallCode = 5997 514 | // CallCode5998 CallCode = 5998 515 | CallCode5998 CallCode = 5998 516 | // CallCode5999 CallCode = 5999 517 | CallCode5999 CallCode = 5999 518 | // CallCode993 CallCode = 993 519 | CallCode993 CallCode = 993 520 | // CallCode35818 CallCode = 35818 521 | CallCode35818 CallCode = 35818 522 | // CallCode262269 CallCode = 262269 523 | CallCode262269 CallCode = 262269 524 | // CallCode262639 CallCode = 262639 525 | CallCode262639 CallCode = 262639 526 | // CallCode441481 CallCode = 441481 527 | CallCode441481 CallCode = 441481 528 | // CallCode441534 CallCode = 441534 529 | CallCode441534 CallCode = 441534 530 | // CallCode441624 CallCode = 441624 531 | CallCode441624 CallCode = 441624 532 | // CallCode3906698 CallCode = 3906698 533 | CallCode3906698 CallCode = 3906698 534 | // CallCode6189162 CallCode = 6189162 535 | CallCode6189162 CallCode = 6189162 536 | // CallCode6189164 CallCode = 6189164 537 | CallCode6189164 CallCode = 6189164 538 | ) 539 | -------------------------------------------------------------------------------- /capitalsconst.go: -------------------------------------------------------------------------------- 1 | package countries 2 | 3 | // TypeCapitalCode for Typer interface 4 | const TypeCapitalCode string = "countries.CapitalCode" 5 | 6 | // TypeCapital for Typer interface 7 | const TypeCapital string = "countries.Capital" 8 | 9 | const ( 10 | // CapitalUnknown CapitalCode = 0 11 | CapitalUnknown CapitalCode = 0 12 | // CapitalAU CapitalCode = CapitalCode(AU) 13 | CapitalAU CapitalCode = CapitalCode(AU) 14 | // CapitalAT CapitalCode = CapitalCode(AT) 15 | CapitalAT CapitalCode = CapitalCode(AT) 16 | // CapitalAZ CapitalCode = CapitalCode(AZ) 17 | CapitalAZ CapitalCode = CapitalCode(AZ) 18 | // CapitalAL CapitalCode = CapitalCode(AL) 19 | CapitalAL CapitalCode = CapitalCode(AL) 20 | // CapitalDZ CapitalCode = CapitalCode(DZ) 21 | CapitalDZ CapitalCode = CapitalCode(DZ) 22 | // CapitalAS CapitalCode = CapitalCode(AS) 23 | CapitalAS CapitalCode = CapitalCode(AS) 24 | // CapitalAI CapitalCode = CapitalCode(AI) 25 | CapitalAI CapitalCode = CapitalCode(AI) 26 | // CapitalAO CapitalCode = CapitalCode(AO) 27 | CapitalAO CapitalCode = CapitalCode(AO) 28 | // CapitalAD CapitalCode = CapitalCode(AD) 29 | CapitalAD CapitalCode = CapitalCode(AD) 30 | // CapitalAQ CapitalCode = CapitalCode(AQ) 31 | CapitalAQ CapitalCode = CapitalCode(AQ) 32 | // CapitalAG CapitalCode = CapitalCode(AG) 33 | CapitalAG CapitalCode = CapitalCode(AG) 34 | // CapitalAN CapitalCode = CapitalCode(AN) 35 | CapitalAN CapitalCode = CapitalCode(AN) 36 | // CapitalAE CapitalCode = CapitalCode(AE) 37 | CapitalAE CapitalCode = CapitalCode(AE) 38 | // CapitalAR CapitalCode = CapitalCode(AR) 39 | CapitalAR CapitalCode = CapitalCode(AR) 40 | // CapitalAM CapitalCode = CapitalCode(AM) 41 | CapitalAM CapitalCode = CapitalCode(AM) 42 | // CapitalAW CapitalCode = CapitalCode(AW) 43 | CapitalAW CapitalCode = CapitalCode(AW) 44 | // CapitalAF CapitalCode = CapitalCode(AF) 45 | CapitalAF CapitalCode = CapitalCode(AF) 46 | // CapitalBS CapitalCode = CapitalCode(BS) 47 | CapitalBS CapitalCode = CapitalCode(BS) 48 | // CapitalBD CapitalCode = CapitalCode(BD) 49 | CapitalBD CapitalCode = CapitalCode(BD) 50 | // CapitalBB CapitalCode = CapitalCode(BB) 51 | CapitalBB CapitalCode = CapitalCode(BB) 52 | // CapitalBH CapitalCode = CapitalCode(BH) 53 | CapitalBH CapitalCode = CapitalCode(BH) 54 | // CapitalBY CapitalCode = CapitalCode(BY) 55 | CapitalBY CapitalCode = CapitalCode(BY) 56 | // CapitalBZ CapitalCode = CapitalCode(BZ) 57 | CapitalBZ CapitalCode = CapitalCode(BZ) 58 | // CapitalBE CapitalCode = CapitalCode(BE) 59 | CapitalBE CapitalCode = CapitalCode(BE) 60 | // CapitalBJ CapitalCode = CapitalCode(BJ) 61 | CapitalBJ CapitalCode = CapitalCode(BJ) 62 | // CapitalBM CapitalCode = CapitalCode(BM) 63 | CapitalBM CapitalCode = CapitalCode(BM) 64 | // CapitalBG CapitalCode = CapitalCode(BG) 65 | CapitalBG CapitalCode = CapitalCode(BG) 66 | // CapitalBO CapitalCode = CapitalCode(BO) 67 | CapitalBO CapitalCode = CapitalCode(BO) 68 | // CapitalBA CapitalCode = CapitalCode(BA) 69 | CapitalBA CapitalCode = CapitalCode(BA) 70 | // CapitalBW CapitalCode = CapitalCode(BW) 71 | CapitalBW CapitalCode = CapitalCode(BW) 72 | // CapitalBR CapitalCode = CapitalCode(BR) 73 | CapitalBR CapitalCode = CapitalCode(BR) 74 | // CapitalIO CapitalCode = CapitalCode(IO) 75 | CapitalIO CapitalCode = CapitalCode(IO) 76 | // CapitalBN CapitalCode = CapitalCode(BN) 77 | CapitalBN CapitalCode = CapitalCode(BN) 78 | // CapitalBF CapitalCode = CapitalCode(BF) 79 | CapitalBF CapitalCode = CapitalCode(BF) 80 | // CapitalBI CapitalCode = CapitalCode(BI) 81 | CapitalBI CapitalCode = CapitalCode(BI) 82 | // CapitalBT CapitalCode = CapitalCode(BT) 83 | CapitalBT CapitalCode = CapitalCode(BT) 84 | // CapitalVU CapitalCode = CapitalCode(VU) 85 | CapitalVU CapitalCode = CapitalCode(VU) 86 | // CapitalVA CapitalCode = CapitalCode(VA) 87 | CapitalVA CapitalCode = CapitalCode(VA) 88 | // CapitalGB CapitalCode = CapitalCode(GB) 89 | CapitalGB CapitalCode = CapitalCode(GB) 90 | // CapitalHU CapitalCode = CapitalCode(HU) 91 | CapitalHU CapitalCode = CapitalCode(HU) 92 | // CapitalVE CapitalCode = CapitalCode(VE) 93 | CapitalVE CapitalCode = CapitalCode(VE) 94 | // CapitalVG CapitalCode = CapitalCode(VG) 95 | CapitalVG CapitalCode = CapitalCode(VG) 96 | // CapitalVI CapitalCode = CapitalCode(VI) 97 | CapitalVI CapitalCode = CapitalCode(VI) 98 | // CapitalTL CapitalCode = CapitalCode(TL) 99 | CapitalTL CapitalCode = CapitalCode(TL) 100 | // CapitalVN CapitalCode = CapitalCode(VN) 101 | CapitalVN CapitalCode = CapitalCode(VN) 102 | // CapitalGA CapitalCode = CapitalCode(GA) 103 | CapitalGA CapitalCode = CapitalCode(GA) 104 | // CapitalHT CapitalCode = CapitalCode(HT) 105 | CapitalHT CapitalCode = CapitalCode(HT) 106 | // CapitalGY CapitalCode = CapitalCode(GY) 107 | CapitalGY CapitalCode = CapitalCode(GY) 108 | // CapitalGM CapitalCode = CapitalCode(GM) 109 | CapitalGM CapitalCode = CapitalCode(GM) 110 | // CapitalGH CapitalCode = CapitalCode(GH) 111 | CapitalGH CapitalCode = CapitalCode(GH) 112 | // CapitalGP CapitalCode = CapitalCode(GP) 113 | CapitalGP CapitalCode = CapitalCode(GP) 114 | // CapitalGT CapitalCode = CapitalCode(GT) 115 | CapitalGT CapitalCode = CapitalCode(GT) 116 | // CapitalGN CapitalCode = CapitalCode(GN) 117 | CapitalGN CapitalCode = CapitalCode(GN) 118 | // CapitalGW CapitalCode = CapitalCode(GW) 119 | CapitalGW CapitalCode = CapitalCode(GW) 120 | // CapitalDE CapitalCode = CapitalCode(DE) 121 | CapitalDE CapitalCode = CapitalCode(DE) 122 | // CapitalGI CapitalCode = CapitalCode(GI) 123 | CapitalGI CapitalCode = CapitalCode(GI) 124 | // CapitalHN CapitalCode = CapitalCode(HN) 125 | CapitalHN CapitalCode = CapitalCode(HN) 126 | // CapitalHK CapitalCode = CapitalCode(HK) 127 | CapitalHK CapitalCode = CapitalCode(HK) 128 | // CapitalGD CapitalCode = CapitalCode(GD) 129 | CapitalGD CapitalCode = CapitalCode(GD) 130 | // CapitalGL CapitalCode = CapitalCode(GL) 131 | CapitalGL CapitalCode = CapitalCode(GL) 132 | // CapitalGR CapitalCode = CapitalCode(GR) 133 | CapitalGR CapitalCode = CapitalCode(GR) 134 | // CapitalGE CapitalCode = CapitalCode(GE) 135 | CapitalGE CapitalCode = CapitalCode(GE) 136 | // CapitalGU CapitalCode = CapitalCode(GU) 137 | CapitalGU CapitalCode = CapitalCode(GU) 138 | // CapitalDK CapitalCode = CapitalCode(DK) 139 | CapitalDK CapitalCode = CapitalCode(DK) 140 | // CapitalCD CapitalCode = CapitalCode(CD) 141 | CapitalCD CapitalCode = CapitalCode(CD) 142 | // CapitalDJ CapitalCode = CapitalCode(DJ) 143 | CapitalDJ CapitalCode = CapitalCode(DJ) 144 | // CapitalDM CapitalCode = CapitalCode(DM) 145 | CapitalDM CapitalCode = CapitalCode(DM) 146 | // CapitalDO CapitalCode = CapitalCode(DO) 147 | CapitalDO CapitalCode = CapitalCode(DO) 148 | // CapitalEG CapitalCode = CapitalCode(EG) 149 | CapitalEG CapitalCode = CapitalCode(EG) 150 | // CapitalZM CapitalCode = CapitalCode(ZM) 151 | CapitalZM CapitalCode = CapitalCode(ZM) 152 | // CapitalEH CapitalCode = CapitalCode(EH) 153 | CapitalEH CapitalCode = CapitalCode(EH) 154 | // CapitalZW CapitalCode = CapitalCode(ZW) 155 | CapitalZW CapitalCode = CapitalCode(ZW) 156 | // CapitalIL CapitalCode = CapitalCode(IL) 157 | CapitalIL CapitalCode = CapitalCode(IL) 158 | // CapitalIN CapitalCode = CapitalCode(IN) 159 | CapitalIN CapitalCode = CapitalCode(IN) 160 | // CapitalID CapitalCode = CapitalCode(ID) 161 | CapitalID CapitalCode = CapitalCode(ID) 162 | // CapitalJO CapitalCode = CapitalCode(JO) 163 | CapitalJO CapitalCode = CapitalCode(JO) 164 | // CapitalIQ CapitalCode = CapitalCode(IQ) 165 | CapitalIQ CapitalCode = CapitalCode(IQ) 166 | // CapitalIR CapitalCode = CapitalCode(IR) 167 | CapitalIR CapitalCode = CapitalCode(IR) 168 | // CapitalIE CapitalCode = CapitalCode(IE) 169 | CapitalIE CapitalCode = CapitalCode(IE) 170 | // CapitalIS CapitalCode = CapitalCode(IS) 171 | CapitalIS CapitalCode = CapitalCode(IS) 172 | // CapitalES CapitalCode = CapitalCode(ES) 173 | CapitalES CapitalCode = CapitalCode(ES) 174 | // CapitalIT CapitalCode = CapitalCode(IT) 175 | CapitalIT CapitalCode = CapitalCode(IT) 176 | // CapitalYE CapitalCode = CapitalCode(YE) 177 | CapitalYE CapitalCode = CapitalCode(YE) 178 | // CapitalKZ CapitalCode = CapitalCode(KZ) 179 | CapitalKZ CapitalCode = CapitalCode(KZ) 180 | // CapitalKY CapitalCode = CapitalCode(KY) 181 | CapitalKY CapitalCode = CapitalCode(KY) 182 | // CapitalKH CapitalCode = CapitalCode(KH) 183 | CapitalKH CapitalCode = CapitalCode(KH) 184 | // CapitalCM CapitalCode = CapitalCode(CM) 185 | CapitalCM CapitalCode = CapitalCode(CM) 186 | // CapitalCA CapitalCode = CapitalCode(CA) 187 | CapitalCA CapitalCode = CapitalCode(CA) 188 | // CapitalQA CapitalCode = CapitalCode(QA) 189 | CapitalQA CapitalCode = CapitalCode(QA) 190 | // CapitalKE CapitalCode = CapitalCode(KE) 191 | CapitalKE CapitalCode = CapitalCode(KE) 192 | // CapitalCY CapitalCode = CapitalCode(CY) 193 | CapitalCY CapitalCode = CapitalCode(CY) 194 | // CapitalKI CapitalCode = CapitalCode(KI) 195 | CapitalKI CapitalCode = CapitalCode(KI) 196 | // CapitalCN CapitalCode = CapitalCode(CN) 197 | CapitalCN CapitalCode = CapitalCode(CN) 198 | // CapitalCC CapitalCode = CapitalCode(CC) 199 | CapitalCC CapitalCode = CapitalCode(CC) 200 | // CapitalCO CapitalCode = CapitalCode(CO) 201 | CapitalCO CapitalCode = CapitalCode(CO) 202 | // CapitalKM CapitalCode = CapitalCode(KM) 203 | CapitalKM CapitalCode = CapitalCode(KM) 204 | // CapitalCG CapitalCode = CapitalCode(CG) 205 | CapitalCG CapitalCode = CapitalCode(CG) 206 | // CapitalKP CapitalCode = CapitalCode(KP) 207 | CapitalKP CapitalCode = CapitalCode(KP) 208 | // CapitalKR CapitalCode = CapitalCode(KR) 209 | CapitalKR CapitalCode = CapitalCode(KR) 210 | // CapitalCR CapitalCode = CapitalCode(CR) 211 | CapitalCR CapitalCode = CapitalCode(CR) 212 | // CapitalCI CapitalCode = CapitalCode(CI) 213 | CapitalCI CapitalCode = CapitalCode(CI) 214 | // CapitalCU CapitalCode = CapitalCode(CU) 215 | CapitalCU CapitalCode = CapitalCode(CU) 216 | // CapitalKW CapitalCode = CapitalCode(KW) 217 | CapitalKW CapitalCode = CapitalCode(KW) 218 | // CapitalKG CapitalCode = CapitalCode(KG) 219 | CapitalKG CapitalCode = CapitalCode(KG) 220 | // CapitalLA CapitalCode = CapitalCode(LA) 221 | CapitalLA CapitalCode = CapitalCode(LA) 222 | // CapitalLV CapitalCode = CapitalCode(LV) 223 | CapitalLV CapitalCode = CapitalCode(LV) 224 | // CapitalLS CapitalCode = CapitalCode(LS) 225 | CapitalLS CapitalCode = CapitalCode(LS) 226 | // CapitalLR CapitalCode = CapitalCode(LR) 227 | CapitalLR CapitalCode = CapitalCode(LR) 228 | // CapitalLB CapitalCode = CapitalCode(LB) 229 | CapitalLB CapitalCode = CapitalCode(LB) 230 | // CapitalLY CapitalCode = CapitalCode(LY) 231 | CapitalLY CapitalCode = CapitalCode(LY) 232 | // CapitalLT CapitalCode = CapitalCode(LT) 233 | CapitalLT CapitalCode = CapitalCode(LT) 234 | // CapitalLI CapitalCode = CapitalCode(LI) 235 | CapitalLI CapitalCode = CapitalCode(LI) 236 | // CapitalLU CapitalCode = CapitalCode(LU) 237 | CapitalLU CapitalCode = CapitalCode(LU) 238 | // CapitalMU CapitalCode = CapitalCode(MU) 239 | CapitalMU CapitalCode = CapitalCode(MU) 240 | // CapitalMR CapitalCode = CapitalCode(MR) 241 | CapitalMR CapitalCode = CapitalCode(MR) 242 | // CapitalMG CapitalCode = CapitalCode(MG) 243 | CapitalMG CapitalCode = CapitalCode(MG) 244 | // CapitalYT CapitalCode = CapitalCode(YT) 245 | CapitalYT CapitalCode = CapitalCode(YT) 246 | // CapitalMO CapitalCode = CapitalCode(MO) 247 | CapitalMO CapitalCode = CapitalCode(MO) 248 | // CapitalMK CapitalCode = CapitalCode(MK) 249 | CapitalMK CapitalCode = CapitalCode(MK) 250 | // CapitalMW CapitalCode = CapitalCode(MW) 251 | CapitalMW CapitalCode = CapitalCode(MW) 252 | // CapitalMY CapitalCode = CapitalCode(MY) 253 | CapitalMY CapitalCode = CapitalCode(MY) 254 | // CapitalML CapitalCode = CapitalCode(ML) 255 | CapitalML CapitalCode = CapitalCode(ML) 256 | // CapitalMV CapitalCode = CapitalCode(MV) 257 | CapitalMV CapitalCode = CapitalCode(MV) 258 | // CapitalMT CapitalCode = CapitalCode(MT) 259 | CapitalMT CapitalCode = CapitalCode(MT) 260 | // CapitalMP CapitalCode = CapitalCode(MP) 261 | CapitalMP CapitalCode = CapitalCode(MP) 262 | // CapitalMA CapitalCode = CapitalCode(MA) 263 | CapitalMA CapitalCode = CapitalCode(MA) 264 | // CapitalMQ CapitalCode = CapitalCode(MQ) 265 | CapitalMQ CapitalCode = CapitalCode(MQ) 266 | // CapitalMH CapitalCode = CapitalCode(MH) 267 | CapitalMH CapitalCode = CapitalCode(MH) 268 | // CapitalMX CapitalCode = CapitalCode(MX) 269 | CapitalMX CapitalCode = CapitalCode(MX) 270 | // CapitalFM CapitalCode = CapitalCode(FM) 271 | CapitalFM CapitalCode = CapitalCode(FM) 272 | // CapitalMZ CapitalCode = CapitalCode(MZ) 273 | CapitalMZ CapitalCode = CapitalCode(MZ) 274 | // CapitalMD CapitalCode = CapitalCode(MD) 275 | CapitalMD CapitalCode = CapitalCode(MD) 276 | // CapitalMC CapitalCode = CapitalCode(MC) 277 | CapitalMC CapitalCode = CapitalCode(MC) 278 | // CapitalMN CapitalCode = CapitalCode(MN) 279 | CapitalMN CapitalCode = CapitalCode(MN) 280 | // CapitalMS CapitalCode = CapitalCode(MS) 281 | CapitalMS CapitalCode = CapitalCode(MS) 282 | // CapitalMM CapitalCode = CapitalCode(MM) 283 | CapitalMM CapitalCode = CapitalCode(MM) 284 | // CapitalNA CapitalCode = CapitalCode(NA) 285 | CapitalNA CapitalCode = CapitalCode(NA) 286 | // CapitalNR CapitalCode = CapitalCode(NR) 287 | CapitalNR CapitalCode = CapitalCode(NR) 288 | // CapitalNP CapitalCode = CapitalCode(NP) 289 | CapitalNP CapitalCode = CapitalCode(NP) 290 | // CapitalNE CapitalCode = CapitalCode(NE) 291 | CapitalNE CapitalCode = CapitalCode(NE) 292 | // CapitalNG CapitalCode = CapitalCode(NG) 293 | CapitalNG CapitalCode = CapitalCode(NG) 294 | // CapitalNL CapitalCode = CapitalCode(NL) 295 | CapitalNL CapitalCode = CapitalCode(NL) 296 | // CapitalNI CapitalCode = CapitalCode(NI) 297 | CapitalNI CapitalCode = CapitalCode(NI) 298 | // CapitalNU CapitalCode = CapitalCode(NU) 299 | CapitalNU CapitalCode = CapitalCode(NU) 300 | // CapitalNZ CapitalCode = CapitalCode(NZ) 301 | CapitalNZ CapitalCode = CapitalCode(NZ) 302 | // CapitalNC CapitalCode = CapitalCode(NC) 303 | CapitalNC CapitalCode = CapitalCode(NC) 304 | // CapitalNO CapitalCode = CapitalCode(NO) 305 | CapitalNO CapitalCode = CapitalCode(NO) 306 | // CapitalOM CapitalCode = CapitalCode(OM) 307 | CapitalOM CapitalCode = CapitalCode(OM) 308 | // CapitalBV CapitalCode = CapitalCode(BV) 309 | CapitalBV CapitalCode = CapitalCode(BV) 310 | // CapitalIM CapitalCode = CapitalCode(IM) 311 | CapitalIM CapitalCode = CapitalCode(IM) 312 | // CapitalNF CapitalCode = CapitalCode(NF) 313 | CapitalNF CapitalCode = CapitalCode(NF) 314 | // CapitalPN CapitalCode = CapitalCode(PN) 315 | CapitalPN CapitalCode = CapitalCode(PN) 316 | // CapitalCX CapitalCode = CapitalCode(CX) 317 | CapitalCX CapitalCode = CapitalCode(CX) 318 | // CapitalSH CapitalCode = CapitalCode(SH) 319 | CapitalSH CapitalCode = CapitalCode(SH) 320 | // CapitalWF CapitalCode = CapitalCode(WF) 321 | CapitalWF CapitalCode = CapitalCode(WF) 322 | // CapitalHM CapitalCode = CapitalCode(HM) 323 | CapitalHM CapitalCode = CapitalCode(HM) 324 | // CapitalCV CapitalCode = CapitalCode(CV) 325 | CapitalCV CapitalCode = CapitalCode(CV) 326 | // CapitalCK CapitalCode = CapitalCode(CK) 327 | CapitalCK CapitalCode = CapitalCode(CK) 328 | // CapitalWS CapitalCode = CapitalCode(WS) 329 | CapitalWS CapitalCode = CapitalCode(WS) 330 | // CapitalSJ CapitalCode = CapitalCode(SJ) 331 | CapitalSJ CapitalCode = CapitalCode(SJ) 332 | // CapitalTC CapitalCode = CapitalCode(TC) 333 | CapitalTC CapitalCode = CapitalCode(TC) 334 | // CapitalUM CapitalCode = CapitalCode(UM) 335 | CapitalUM CapitalCode = CapitalCode(UM) 336 | // CapitalPK CapitalCode = CapitalCode(PK) 337 | CapitalPK CapitalCode = CapitalCode(PK) 338 | // CapitalPW CapitalCode = CapitalCode(PW) 339 | CapitalPW CapitalCode = CapitalCode(PW) 340 | // CapitalPS CapitalCode = CapitalCode(PS) 341 | CapitalPS CapitalCode = CapitalCode(PS) 342 | // CapitalPA CapitalCode = CapitalCode(PA) 343 | CapitalPA CapitalCode = CapitalCode(PA) 344 | // CapitalPG CapitalCode = CapitalCode(PG) 345 | CapitalPG CapitalCode = CapitalCode(PG) 346 | // CapitalPY CapitalCode = CapitalCode(PY) 347 | CapitalPY CapitalCode = CapitalCode(PY) 348 | // CapitalPE CapitalCode = CapitalCode(PE) 349 | CapitalPE CapitalCode = CapitalCode(PE) 350 | // CapitalPL CapitalCode = CapitalCode(PL) 351 | CapitalPL CapitalCode = CapitalCode(PL) 352 | // CapitalPT CapitalCode = CapitalCode(PT) 353 | CapitalPT CapitalCode = CapitalCode(PT) 354 | // CapitalPR CapitalCode = CapitalCode(PR) 355 | CapitalPR CapitalCode = CapitalCode(PR) 356 | // CapitalRE CapitalCode = CapitalCode(RE) 357 | CapitalRE CapitalCode = CapitalCode(RE) 358 | // CapitalRU CapitalCode = CapitalCode(RU) 359 | CapitalRU CapitalCode = CapitalCode(RU) 360 | // CapitalRW CapitalCode = CapitalCode(RW) 361 | CapitalRW CapitalCode = CapitalCode(RW) 362 | // CapitalRO CapitalCode = CapitalCode(RO) 363 | CapitalRO CapitalCode = CapitalCode(RO) 364 | // CapitalSV CapitalCode = CapitalCode(SV) 365 | CapitalSV CapitalCode = CapitalCode(SV) 366 | // CapitalSM CapitalCode = CapitalCode(SM) 367 | CapitalSM CapitalCode = CapitalCode(SM) 368 | // CapitalST CapitalCode = CapitalCode(ST) 369 | CapitalST CapitalCode = CapitalCode(ST) 370 | // CapitalSA CapitalCode = CapitalCode(SA) 371 | CapitalSA CapitalCode = CapitalCode(SA) 372 | // CapitalSZ CapitalCode = CapitalCode(SZ) 373 | CapitalSZ CapitalCode = CapitalCode(SZ) 374 | // CapitalSC CapitalCode = CapitalCode(SC) 375 | CapitalSC CapitalCode = CapitalCode(SC) 376 | // CapitalSN CapitalCode = CapitalCode(SN) 377 | CapitalSN CapitalCode = CapitalCode(SN) 378 | // CapitalPM CapitalCode = CapitalCode(PM) 379 | CapitalPM CapitalCode = CapitalCode(PM) 380 | // CapitalVC CapitalCode = CapitalCode(VC) 381 | CapitalVC CapitalCode = CapitalCode(VC) 382 | // CapitalKN CapitalCode = CapitalCode(KN) 383 | CapitalKN CapitalCode = CapitalCode(KN) 384 | // CapitalLC CapitalCode = CapitalCode(LC) 385 | CapitalLC CapitalCode = CapitalCode(LC) 386 | // CapitalSG CapitalCode = CapitalCode(SG) 387 | CapitalSG CapitalCode = CapitalCode(SG) 388 | // CapitalSY CapitalCode = CapitalCode(SY) 389 | CapitalSY CapitalCode = CapitalCode(SY) 390 | // CapitalSK CapitalCode = CapitalCode(SK) 391 | CapitalSK CapitalCode = CapitalCode(SK) 392 | // CapitalSI CapitalCode = CapitalCode(SI) 393 | CapitalSI CapitalCode = CapitalCode(SI) 394 | // CapitalUS CapitalCode = CapitalCode(US) 395 | CapitalUS CapitalCode = CapitalCode(US) 396 | // CapitalSB CapitalCode = CapitalCode(SB) 397 | CapitalSB CapitalCode = CapitalCode(SB) 398 | // CapitalSO CapitalCode = CapitalCode(SO) 399 | CapitalSO CapitalCode = CapitalCode(SO) 400 | // CapitalSD CapitalCode = CapitalCode(SD) 401 | CapitalSD CapitalCode = CapitalCode(SD) 402 | // CapitalSR CapitalCode = CapitalCode(SR) 403 | CapitalSR CapitalCode = CapitalCode(SR) 404 | // CapitalSL CapitalCode = CapitalCode(SL) 405 | CapitalSL CapitalCode = CapitalCode(SL) 406 | // CapitalTJ CapitalCode = CapitalCode(TJ) 407 | CapitalTJ CapitalCode = CapitalCode(TJ) 408 | // CapitalTW CapitalCode = CapitalCode(TW) 409 | CapitalTW CapitalCode = CapitalCode(TW) 410 | // CapitalTH CapitalCode = CapitalCode(TH) 411 | CapitalTH CapitalCode = CapitalCode(TH) 412 | // CapitalTZ CapitalCode = CapitalCode(TZ) 413 | CapitalTZ CapitalCode = CapitalCode(TZ) 414 | // CapitalTG CapitalCode = CapitalCode(TG) 415 | CapitalTG CapitalCode = CapitalCode(TG) 416 | // CapitalTK CapitalCode = CapitalCode(TK) 417 | CapitalTK CapitalCode = CapitalCode(TK) 418 | // CapitalTO CapitalCode = CapitalCode(TO) 419 | CapitalTO CapitalCode = CapitalCode(TO) 420 | // CapitalTT CapitalCode = CapitalCode(TT) 421 | CapitalTT CapitalCode = CapitalCode(TT) 422 | // CapitalTV CapitalCode = CapitalCode(TV) 423 | CapitalTV CapitalCode = CapitalCode(TV) 424 | // CapitalTN CapitalCode = CapitalCode(TN) 425 | CapitalTN CapitalCode = CapitalCode(TN) 426 | // CapitalTM CapitalCode = CapitalCode(TM) 427 | CapitalTM CapitalCode = CapitalCode(TM) 428 | // CapitalTR CapitalCode = CapitalCode(TR) 429 | CapitalTR CapitalCode = CapitalCode(TR) 430 | // CapitalUG CapitalCode = CapitalCode(UG) 431 | CapitalUG CapitalCode = CapitalCode(UG) 432 | // CapitalUZ CapitalCode = CapitalCode(UZ) 433 | CapitalUZ CapitalCode = CapitalCode(UZ) 434 | // CapitalUA CapitalCode = CapitalCode(UA) 435 | CapitalUA CapitalCode = CapitalCode(UA) 436 | // CapitalUY CapitalCode = CapitalCode(UY) 437 | CapitalUY CapitalCode = CapitalCode(UY) 438 | // CapitalFO CapitalCode = CapitalCode(FO) 439 | CapitalFO CapitalCode = CapitalCode(FO) 440 | // CapitalFJ CapitalCode = CapitalCode(FJ) 441 | CapitalFJ CapitalCode = CapitalCode(FJ) 442 | // CapitalPH CapitalCode = CapitalCode(PH) 443 | CapitalPH CapitalCode = CapitalCode(PH) 444 | // CapitalFI CapitalCode = CapitalCode(FI) 445 | CapitalFI CapitalCode = CapitalCode(FI) 446 | // CapitalFK CapitalCode = CapitalCode(FK) 447 | CapitalFK CapitalCode = CapitalCode(FK) 448 | // CapitalFR CapitalCode = CapitalCode(FR) 449 | CapitalFR CapitalCode = CapitalCode(FR) 450 | // CapitalGF CapitalCode = CapitalCode(GF) 451 | CapitalGF CapitalCode = CapitalCode(GF) 452 | // CapitalPF CapitalCode = CapitalCode(PF) 453 | CapitalPF CapitalCode = CapitalCode(PF) 454 | // CapitalTF CapitalCode = CapitalCode(TF) 455 | CapitalTF CapitalCode = CapitalCode(TF) 456 | // CapitalHR CapitalCode = CapitalCode(HR) 457 | CapitalHR CapitalCode = CapitalCode(HR) 458 | // CapitalCF CapitalCode = CapitalCode(CF) 459 | CapitalCF CapitalCode = CapitalCode(CF) 460 | // CapitalTD CapitalCode = CapitalCode(TD) 461 | CapitalTD CapitalCode = CapitalCode(TD) 462 | // CapitalCZ CapitalCode = CapitalCode(CZ) 463 | CapitalCZ CapitalCode = CapitalCode(CZ) 464 | // CapitalCL CapitalCode = CapitalCode(CL) 465 | CapitalCL CapitalCode = CapitalCode(CL) 466 | // CapitalCH CapitalCode = CapitalCode(CH) 467 | CapitalCH CapitalCode = CapitalCode(CH) 468 | // CapitalSE CapitalCode = CapitalCode(SE) 469 | CapitalSE CapitalCode = CapitalCode(SE) 470 | // CapitalXS CapitalCode = CapitalCode(XS) 471 | CapitalXS CapitalCode = CapitalCode(XS) 472 | // CapitalLK CapitalCode = CapitalCode(LK) 473 | CapitalLK CapitalCode = CapitalCode(LK) 474 | // CapitalEC CapitalCode = CapitalCode(EC) 475 | CapitalEC CapitalCode = CapitalCode(EC) 476 | // CapitalGQ CapitalCode = CapitalCode(GQ) 477 | CapitalGQ CapitalCode = CapitalCode(GQ) 478 | // CapitalER CapitalCode = CapitalCode(ER) 479 | CapitalER CapitalCode = CapitalCode(ER) 480 | // CapitalEE CapitalCode = CapitalCode(EE) 481 | CapitalEE CapitalCode = CapitalCode(EE) 482 | // CapitalET CapitalCode = CapitalCode(ET) 483 | CapitalET CapitalCode = CapitalCode(ET) 484 | // CapitalZA CapitalCode = CapitalCode(ZA) 485 | CapitalZA CapitalCode = CapitalCode(ZA) 486 | // CapitalYU CapitalCode = CapitalCode(YU) 487 | CapitalYU CapitalCode = CapitalCode(YU) 488 | // CapitalGS CapitalCode = CapitalCode(GS) 489 | CapitalGS CapitalCode = CapitalCode(GS) 490 | // CapitalJM CapitalCode = CapitalCode(JM) 491 | CapitalJM CapitalCode = CapitalCode(JM) 492 | // CapitalME CapitalCode = CapitalCode(ME) 493 | CapitalME CapitalCode = CapitalCode(ME) 494 | // CapitalBL CapitalCode = CapitalCode(BL) 495 | CapitalBL CapitalCode = CapitalCode(BL) 496 | // CapitalSX CapitalCode = CapitalCode(SX) 497 | CapitalSX CapitalCode = CapitalCode(SX) 498 | // CapitalRS CapitalCode = CapitalCode(RS) 499 | CapitalRS CapitalCode = CapitalCode(RS) 500 | // CapitalAX CapitalCode = CapitalCode(AX) 501 | CapitalAX CapitalCode = CapitalCode(AX) 502 | // CapitalBQ CapitalCode = CapitalCode(BQ) 503 | CapitalBQ CapitalCode = CapitalCode(BQ) 504 | // CapitalGG CapitalCode = CapitalCode(GG) 505 | CapitalGG CapitalCode = CapitalCode(GG) 506 | // CapitalJE CapitalCode = CapitalCode(JE) 507 | CapitalJE CapitalCode = CapitalCode(JE) 508 | // CapitalCW CapitalCode = CapitalCode(CW) 509 | CapitalCW CapitalCode = CapitalCode(CW) 510 | // CapitalMF CapitalCode = CapitalCode(MF) 511 | CapitalMF CapitalCode = CapitalCode(MF) 512 | // CapitalSS CapitalCode = CapitalCode(SS) 513 | CapitalSS CapitalCode = CapitalCode(SS) 514 | // CapitalXK CapitalCode = CapitalCode(XK) 515 | CapitalXK CapitalCode = CapitalCode(XK) 516 | // CapitalJP CapitalCode = CapitalCode(JP) 517 | CapitalJP CapitalCode = CapitalCode(JP) 518 | // CapitalXX CapitalCode = CapitalCode(XX) 519 | CapitalXX CapitalCode = CapitalCode(XX) 520 | ) 521 | -------------------------------------------------------------------------------- /changelog.txt: -------------------------------------------------------------------------------- 1 | v 1.3.1 2 | + Add synonyms for some countries 3 | + textPrepare() func improved 4 | + driver.Value changed to local Value interface 5 | 6 | v 1.3 7 | 8 | + Small bugs fixes 9 | + Add country synonyms 10 | + Add more comments 11 | + Add more tests 12 | 13 | v 1.2 14 | + Add Kosovo missing funcs 15 | + Add South Sudan currency 16 | + Add Egypt domain 17 | 18 | v 1.1 19 | + Сhanged CallCode() to CallCodes() for multicodes support 20 | + Add IOC three-letter abbreviation country codes 21 | + Add FIFA three-letter country codes 22 | + Add "Ascension and Tristan da Cunha" 23 | + Add multi callcodes (Dominicana, Jamaica, Puerto Rico and others) 24 | + Add detection of deleted ISO 3166 codes 25 | + Add indeterminate reservations ISO 3166 codes 26 | + Add transitional reservations ISO 3166 codes 27 | + Add non-countries call codes (Inmarsat, International Freephone and others) 28 | + Add Kosovo codes and values 29 | -------------------------------------------------------------------------------- /countries_test.go: -------------------------------------------------------------------------------- 1 | //nolint:gocyclo 2 | package countries 3 | 4 | import ( 5 | "encoding/json" 6 | "testing" 7 | ) 8 | 9 | func getAllCountries(t *testing.T) []CountryCode { 10 | t.Helper() 11 | 12 | allCountries := append(All(), Unknown, International, None) 13 | return append(allCountries, AllNonCountries()...) 14 | } 15 | 16 | //nolint:gocyclo 17 | func TestCountriesByName(t *testing.T) { 18 | for _, c := range getAllCountries(t) { 19 | countryCodeOut := ByName(c.String()) 20 | if countryCodeOut != c { 21 | t.Errorf("Test ByName() err, want %v, got %v", c, countryCodeOut) 22 | } 23 | } 24 | countryCodeOut := ByName("ENGLAND") 25 | if countryCodeOut != GBR { 26 | t.Errorf("Test ByName() err, want %v, got %v", GBR, countryCodeOut) 27 | } 28 | countryCodeOut = ByName("WALES") 29 | if countryCodeOut != XWA { 30 | t.Errorf("Test ByName() err, want %v, got %v", XWA, countryCodeOut) 31 | } 32 | countryCodeOut = ByName("SCOTLAND") 33 | if countryCodeOut != XSC { 34 | t.Errorf("Test ByName() err, want %v, got %v", XSC, countryCodeOut) 35 | } 36 | countryCodeOut = ByName("BRAZIL") 37 | if countryCodeOut != BRA { 38 | t.Errorf("Test ByName() err, want %v, got %v", BRA, countryCodeOut) 39 | } 40 | countryCodeOut = ByName("pupok") 41 | if countryCodeOut != Unknown { 42 | t.Errorf("Test ByName() err, want %v, got %v", Unknown, countryCodeOut) 43 | } 44 | countryCodeOut = ByName(None.String()) 45 | if countryCodeOut != None { 46 | t.Errorf("Test ByName() err, want %v, got %v", None, countryCodeOut) 47 | } 48 | } 49 | 50 | //nolint:gocyclo 51 | func TestCountriesByNumeric(t *testing.T) { 52 | for _, c := range getAllCountries(t) { 53 | countryCodeOut := ByNumeric(int(c)) 54 | if countryCodeOut != c { 55 | t.Errorf("Test ByNumeric() err, want %v, got %v", c, countryCodeOut) 56 | } 57 | } 58 | countryCodeBRA := ByNumeric(76) 59 | if countryCodeBRA != Brazil { 60 | t.Errorf("Test ByNumeric() err, want %v, got %v", Brazil, countryCodeBRA) 61 | } 62 | countryCodeOut := ByNumeric(100500999) 63 | if countryCodeOut != Unknown { 64 | t.Errorf("Test ByNumeric() err, want %v, got %v", Unknown, countryCodeOut) 65 | } 66 | } 67 | 68 | //nolint:gocyclo 69 | func TestCountriesInfo(t *testing.T) { 70 | for _, c := range getAllCountries(t) { 71 | countryCodeOut := c.Info().Code 72 | if countryCodeOut != c { 73 | t.Errorf("Test Info() err, want %v, got %v", c, countryCodeOut) 74 | } 75 | } 76 | } 77 | 78 | //nolint:gocyclo 79 | func TestCountriesInfoValue(t *testing.T) { 80 | for _, c := range AllInfo() { 81 | _, err := c.Value() 82 | _, err2 := json.Marshal(c) 83 | if err != nil || err2 != nil { 84 | t.Errorf("Test allCountriesInfo.Value() err") 85 | } 86 | } 87 | } 88 | 89 | //nolint:gocyclo 90 | func TestCountriesInfoType(t *testing.T) { 91 | for _, c := range AllInfo() { 92 | out := c.Type() 93 | if out != TypeCountry { 94 | t.Errorf("Test allCountriesInfo.Type() err, want %v, got %v", TypeCountry, out) 95 | } 96 | } 97 | } 98 | 99 | //nolint:gocyclo 100 | func TestCountriesInfoScan(t *testing.T) { 101 | for _, c := range AllInfo() { 102 | err := c.Scan(c) 103 | if err != nil { 104 | t.Errorf("Test allCountriesInfo.Scan() err") 105 | } 106 | c2 := *c 107 | err = c.Scan(c2) 108 | if err != nil { 109 | t.Errorf("Test allCountriesInfo.Scan() err") 110 | } 111 | if c.Name != c2.Name || c.Alpha2 != c2.Alpha2 || c.Alpha3 != c2.Alpha3 || c.IOC != c2.IOC || c.Code != c2.Code { 112 | t.Errorf("Test allCountriesInfo.Scan() err") 113 | } 114 | err = c.Scan(nil) 115 | if err == nil { 116 | t.Errorf("Test allCountriesInfo.Scan() err") 117 | } 118 | c = nil 119 | err = c.Scan(c) 120 | if err == nil { 121 | t.Errorf("Test allCountriesInfo.Scan() err") 122 | } 123 | } 124 | } 125 | 126 | //nolint:gocyclo 127 | func TestCountriesCountInfo(t *testing.T) { 128 | out := Total() 129 | want := len(AllInfo()) 130 | if out != want { 131 | t.Errorf("Test AllInfo() err, want %v, got %v", want, out) 132 | } 133 | } 134 | 135 | // Test CallCodes 136 | 137 | //nolint:gocyclo 138 | func TestCallCodesCount(t *testing.T) { 139 | out := TotalCallCodes() 140 | want := len(AllCallCodes()) 141 | if out != want { 142 | t.Errorf("Test AllCallCodes() err, want %v, got %v", want, out) 143 | } 144 | want = len(AllCallCodesInfo()) 145 | if out != want { 146 | t.Errorf("Test AllCallCodesInfo() err, want %v, got %v", want, out) 147 | } 148 | } 149 | 150 | //nolint:gocyclo 151 | func TestCallCodesCode(t *testing.T) { 152 | for _, c := range AllCallCodes() { 153 | info := c.Info() 154 | if info == nil { 155 | t.Errorf("Test Info() err: c == nil") 156 | continue 157 | } 158 | if info.Code != CallCodeUnknown && info.Code != c { 159 | t.Errorf("Test info.Code err, c: %v", *info) 160 | } 161 | if len(info.Countries) < 1 { 162 | t.Errorf("Test info.Countries err, c: %v", *info) 163 | } 164 | } 165 | } 166 | 167 | //nolint:gocyclo 168 | func TestCallCodesIsValid(t *testing.T) { 169 | for _, c := range AllCallCodes() { 170 | if !c.IsValid() && c != CallCodeUnknown { 171 | t.Errorf("Test CallCodes.IsValid() err") 172 | } 173 | } 174 | for _, c := range getAllCountries(t) { 175 | callCodes := c.Info().CallCodes 176 | if len(callCodes) > 0 && !callCodes[0].IsValid() && c != Unknown { 177 | t.Errorf("Test CallCodes.IsValid() err") 178 | } 179 | } 180 | } 181 | 182 | //nolint:gocyclo 183 | func TestCallCodesString(t *testing.T) { 184 | for _, c := range AllCallCodes() { 185 | if c.String() == "" || c.String() == UnknownMsg { 186 | t.Errorf("Test CallCodes.String() err") 187 | } 188 | } 189 | } 190 | 191 | //nolint:gocyclo 192 | func TestCallCodesType(t *testing.T) { 193 | for _, c := range AllCallCodes() { 194 | if c.Type() != TypeCallCode { 195 | t.Errorf("Test CallCodes.Type() err") 196 | } 197 | } 198 | } 199 | 200 | //nolint:gocyclo 201 | func TestCallCodes(t *testing.T) { 202 | for _, c := range AllCallCodes() { 203 | out := c.Type() 204 | if out != TypeCallCode { 205 | t.Errorf("Test AllCallCodes.Type() err, want %v, got %v", TypeCallCodeInfo, out) 206 | } 207 | out2 := c.Info().Code 208 | if out2 != c { 209 | t.Errorf("Test AllCallCodes.Info().Code err, want %v, got %v", c, out2) 210 | } 211 | if len(c.Countries()) < 1 { 212 | t.Errorf("Test AllCallCodes.Countries() err") 213 | } 214 | if !c.IsValid() && c != CallCodeUnknown { 215 | t.Errorf("Test AllCallCodes.IsValid() err") 216 | } 217 | if c.String() == "" { 218 | t.Errorf("Test AllCallCodes.String() err") 219 | } 220 | } 221 | } 222 | 223 | //nolint:gocyclo 224 | func TestCallCodesInfo(t *testing.T) { 225 | for _, c := range AllCallCodes() { 226 | if c.Info().Code != c { 227 | t.Errorf("Test AllCallCodes() err, want %v, got %v", c, c.Info().Code) 228 | } 229 | } 230 | } 231 | 232 | //nolint:gocyclo 233 | func TestCallCodesInfoValue(t *testing.T) { 234 | for _, c := range AllCallCodesInfo() { 235 | _, err := c.Value() 236 | _, err2 := json.Marshal(c) 237 | if err != nil || err2 != nil { 238 | t.Errorf("Test allCallCodesInfo.Value() err") 239 | } 240 | } 241 | } 242 | 243 | //nolint:gocyclo 244 | func TestCallCodesInfoType(t *testing.T) { 245 | for _, c := range AllCallCodesInfo() { 246 | out := c.Type() 247 | if out != TypeCallCodeInfo { 248 | t.Errorf("Test allCallCodesInfo.Type() err, want %v, got %v", TypeCallCodeInfo, out) 249 | } 250 | } 251 | } 252 | 253 | //nolint:gocyclo 254 | func TestCallCodesInfoScan(t *testing.T) { 255 | for _, c := range AllCallCodesInfo() { 256 | err := c.Scan(c) 257 | if err != nil { 258 | t.Errorf("Test allCallCodesInfo.Scan() err") 259 | } 260 | c2 := *c 261 | err = c.Scan(c2) 262 | if err != nil { 263 | t.Errorf("Test allCallCodesInfo.Scan() err") 264 | } 265 | if len(c.Countries) != len(c2.Countries) || c.Code != c2.Code { 266 | t.Errorf("Test allCallCodesInfo.Scan() err") 267 | } 268 | if len(c.Countries) > 0 && c.Countries[0] != c2.Countries[0] { 269 | t.Errorf("Test allCallCodesInfo.Scan() err") 270 | } 271 | if len(c.Countries) > 1 && c.Countries[1] != c2.Countries[1] { 272 | t.Errorf("Test allCallCodesInfo.Scan() err") 273 | } 274 | if len(c.Countries) > 2 && c.Countries[2] != c2.Countries[2] { 275 | t.Errorf("Test allCallCodesInfo.Scan() err") 276 | } 277 | err = c.Scan(nil) 278 | if err == nil { 279 | t.Errorf("Test allCallCodesInfo.Scan() err") 280 | } 281 | c = nil 282 | err = c.Scan(c) 283 | if err == nil { 284 | t.Errorf("Test allCallCodesInfo.Scan() err") 285 | } 286 | } 287 | } 288 | 289 | // Test Currencies 290 | func TestCurrenciesCount(t *testing.T) { 291 | out := TotalCurrencies() 292 | want := len(AllCurrencies()) 293 | if out != want { 294 | t.Errorf("Test AllCurrencies() err, want %v, got %v", want, out) 295 | } 296 | want = len(AllCurrenciesInfo()) 297 | if out != want { 298 | t.Errorf("Test AllCurrenciesInfo() err, want %v, got %v", want, out) 299 | } 300 | } 301 | 302 | //nolint:gocyclo 303 | func TestCurrenciesIsValid(t *testing.T) { 304 | for _, c := range AllCurrencies() { 305 | if !c.IsValid() { 306 | t.Errorf("Test CurrencyCode.IsValid() err") 307 | } 308 | } 309 | for _, c := range getAllCountries(t) { 310 | if !c.Info().Currency.IsValid() && c != ATA && c != Unknown { 311 | t.Errorf("Test CurrencyCode.IsValid() err") 312 | } 313 | } 314 | } 315 | 316 | //nolint:gocyclo 317 | func TestCurrenciesString(t *testing.T) { 318 | for _, c := range AllCurrencies() { 319 | if c.String() == "" || c.String() == UnknownMsg { 320 | t.Errorf("Test CurrencyCode.String() err") 321 | } 322 | } 323 | for _, c := range getAllCountries(t) { 324 | currency := c.Info().Currency 325 | if (currency.String() == "" || currency.String() == UnknownMsg) && c != ATA && c != Unknown { 326 | t.Errorf("Test CurrencyCode.String() err, c: %v", c) 327 | } 328 | } 329 | } 330 | 331 | //nolint:gocyclo 332 | func TestCurrenciesType(t *testing.T) { 333 | for _, c := range AllCurrencies() { 334 | if c.Type() != TypeCurrencyCode { 335 | t.Errorf("Test CurrencyCode.Type() err") 336 | } 337 | } 338 | } 339 | 340 | //nolint:gocyclo 341 | func TestCurrenciesAlpha(t *testing.T) { 342 | for _, c := range AllCurrencies() { 343 | if c.Alpha() == "" || c.Alpha() == UnknownMsg { 344 | t.Errorf("Test CurrencyCode.Alpha() err") 345 | } 346 | } 347 | } 348 | 349 | //nolint:gocyclo 350 | func TestCurrenciesCountries(t *testing.T) { 351 | for _, c := range AllCurrencies() { 352 | if len(c.Countries()) < 1 { 353 | t.Errorf("Test CurrencyCode.Countries() err") 354 | } 355 | } 356 | if len(CurrencyNone.Countries()) != 1 || CurrencyNone.Countries()[0] != None { 357 | t.Errorf("Test CurrencyCode.Countries() err") 358 | } 359 | } 360 | 361 | //nolint:gocyclo 362 | func TestCurrenciesDigits(t *testing.T) { 363 | for _, c := range AllCurrencies() { 364 | digits := c.Digits() 365 | if digits != 0 && digits != 2 && digits != 3 && digits != 4 { 366 | t.Errorf("Test CurrencyCode.Digits() err") 367 | } 368 | } 369 | digits := CurrencyNone.Digits() 370 | if digits != 0 { 371 | t.Errorf("Test CurrencyCode.Digits() err") 372 | } 373 | unknown := CurrencyCode(100500999) 374 | digits = unknown.Digits() 375 | if digits != -1 { 376 | t.Errorf("Test CurrencyCode.Digits() err") 377 | } 378 | } 379 | 380 | //nolint:gocyclo 381 | func TestCurrenciesEmoji(t *testing.T) { 382 | for _, c := range AllCurrencies() { 383 | emoji := c.Emoji() 384 | if emoji == "" || emoji == UnknownMsg { 385 | t.Errorf("Test CurrencyCode.Emoji() err") 386 | } 387 | } 388 | } 389 | 390 | //nolint:gocyclo 391 | func TestCurrenciesNickelRounding(t *testing.T) { 392 | for _, c := range AllCurrencies() { 393 | nr := c.NickelRounding() 394 | if nr != false && c != CurrencyCAD && c != CurrencyDKK && c != CurrencyCHF { 395 | t.Errorf("Test CurrencyCode.NickelRounding() err") 396 | } 397 | if nr != true && (c == CurrencyCAD || c == CurrencyDKK || c == CurrencyCHF) { 398 | t.Errorf("Test CurrencyCode.NickelRounding() err") 399 | } 400 | } 401 | } 402 | 403 | //nolint:gocyclo 404 | func TestCurrenciesInfoValue(t *testing.T) { 405 | for _, c := range AllCurrenciesInfo() { 406 | _, err := c.Value() 407 | _, err2 := json.Marshal(c) 408 | if err != nil || err2 != nil { 409 | t.Errorf("Test allCurrenciesInfo.Value() err") 410 | } 411 | } 412 | } 413 | 414 | //nolint:gocyclo 415 | func TestCurrenciesInfoType(t *testing.T) { 416 | for _, c := range AllCurrenciesInfo() { 417 | out := c.Type() 418 | if out != TypeCurrency { 419 | t.Errorf("Test allCallCodesInfo.Type() err, want %v, got %v", TypeCurrency, out) 420 | } 421 | } 422 | } 423 | 424 | //nolint:gocyclo 425 | func TestCurrenciesInfoScan(t *testing.T) { 426 | for _, c := range AllCurrenciesInfo() { 427 | err := c.Scan(c) 428 | if err != nil { 429 | t.Errorf("Test allCurrenciesInfo.Scan() err") 430 | } 431 | c2 := *c 432 | err = c.Scan(c2) 433 | if err != nil { 434 | t.Errorf("Test allCurrenciesInfo.Scan() err") 435 | } 436 | if len(c.Countries) != len(c2.Countries) || c.Code != c2.Code { 437 | t.Errorf("Test allCurrenciesInfo.Scan() err") 438 | } 439 | if len(c.Countries) > 0 && c.Countries[0] != c2.Countries[0] { 440 | t.Errorf("Test allCurrenciesInfo.Scan() err") 441 | } 442 | if len(c.Countries) > 1 && c.Countries[1] != c2.Countries[1] { 443 | t.Errorf("Test allCurrenciesInfo.Scan() err") 444 | } 445 | if len(c.Countries) > 2 && c.Countries[2] != c2.Countries[2] { 446 | t.Errorf("Test allCurrenciesInfo.Scan() err") 447 | } 448 | err = c.Scan(nil) 449 | if err == nil { 450 | t.Errorf("Test allCurrenciesInfo.Scan() err") 451 | } 452 | c = nil 453 | err = c.Scan(c) 454 | if err == nil { 455 | t.Errorf("Test allCurrenciesInfo.Scan() err") 456 | } 457 | } 458 | } 459 | 460 | //nolint:gocyclo 461 | func TestCurrencyCodeByName(t *testing.T) { 462 | for _, c := range AllCurrencies() { 463 | out := CurrencyCodeByName(c.Alpha()) 464 | if out != c { 465 | t.Errorf("Test CurrencyCodeByName() err, want %v, got %v", c, out) 466 | } 467 | } 468 | out := CurrencyCodeByName("pupok") 469 | if out != CurrencyUnknown { 470 | t.Errorf("Test CurrencyCodeByName() err, want %v, got %v", CurrencyUnknown, out) 471 | } 472 | out = CurrencyCodeByName(None.Alpha2()) 473 | if out != CurrencyNON { 474 | t.Errorf("Test CurrencyCodeByName() err, want %v, got %v", CurrencyNON, out) 475 | } 476 | if CurrencyCodeByName(Palestine.String()) != CurrencyILS { 477 | t.Errorf("Test CurrencyCodeByName() err, want %v, got %v", CurrencyILS, out) 478 | } 479 | } 480 | 481 | // Test Domains 482 | func TestDomainsCount(t *testing.T) { 483 | out := TotalDomains() 484 | want := len(AllDomains()) 485 | if out != want { 486 | t.Errorf("Test AllDomains() err, want %v, got %v", want, out) 487 | } 488 | want = len(AllDomainsInfo()) 489 | if out != want { 490 | t.Errorf("Test AllDomains() err, want %v, got %v", want, out) 491 | } 492 | } 493 | 494 | //nolint:gocyclo 495 | func TestDomainsCode(t *testing.T) { 496 | for _, c := range AllDomains() { 497 | info := c.Info() 498 | if info.Country == Unknown { 499 | t.Errorf("Test info.Code err, c: %v", *info) 500 | } 501 | } 502 | } 503 | 504 | //nolint:gocyclo 505 | func TestDomainsIsValid(t *testing.T) { 506 | for _, c := range AllDomains() { 507 | if !c.IsValid() { 508 | t.Errorf("Test DomainCode.IsValid() err") 509 | } 510 | } 511 | for _, c := range getAllCountries(t) { 512 | if !c.Info().Domain.IsValid() && c != Unknown && int(c) < 999 { 513 | t.Errorf("Test DomainCode.IsValid() err") 514 | } 515 | } 516 | } 517 | 518 | //nolint:gocyclo 519 | func TestDomainsCountry(t *testing.T) { 520 | for _, c := range AllDomains() { 521 | if c.Country() != CountryCode(c) { 522 | t.Errorf("Test DomainCode.Country() err") 523 | } 524 | } 525 | unknown := DomainCode(990) 526 | if unknown.Country() != Unknown { 527 | t.Errorf("Test DomainCode.Country() err") 528 | } 529 | } 530 | 531 | //nolint:gocyclo 532 | func TestDomainsString(t *testing.T) { 533 | for _, c := range AllDomains() { 534 | if c.String() == "" || c.String() == UnknownMsg { 535 | t.Errorf("Test DomainCode.String() err") 536 | } 537 | } 538 | } 539 | 540 | //nolint:gocyclo 541 | func TestDomainsType(t *testing.T) { 542 | for _, c := range AllDomains() { 543 | if c.Type() != TypeDomainCode { 544 | t.Errorf("Test DomainCode.Type() err") 545 | } 546 | } 547 | } 548 | 549 | //nolint:gocyclo 550 | func TestDomainsInfo(t *testing.T) { 551 | for _, c := range AllDomains() { 552 | info := c.Info() 553 | if info.Code == DomainUnknown || info.Code != c { 554 | t.Errorf("Test info.Code err, c: %v", *info) 555 | } 556 | } 557 | } 558 | 559 | //nolint:gocyclo 560 | func TestDomainsInfoValue(t *testing.T) { 561 | for _, c := range AllDomainsInfo() { 562 | _, err := c.Value() 563 | _, err2 := json.Marshal(c) 564 | if err != nil || err2 != nil { 565 | t.Errorf("Test allDomainsInfo.Value() err") 566 | } 567 | } 568 | } 569 | 570 | //nolint:gocyclo 571 | func TestDomainsInfoType(t *testing.T) { 572 | for _, c := range AllDomainsInfo() { 573 | out := c.Type() 574 | if out != TypeDomain { 575 | t.Errorf("Test allDomainsInfo.Type() err, want %v, got %v", TypeDomain, out) 576 | } 577 | } 578 | } 579 | 580 | //nolint:gocyclo 581 | func TestDomainsInfoScan(t *testing.T) { 582 | for _, c := range AllDomainsInfo() { 583 | err := c.Scan(c) 584 | if err != nil { 585 | t.Errorf("Test allDomainsInfo.Scan() err") 586 | } 587 | c2 := *c 588 | err = c.Scan(c2) 589 | if err != nil { 590 | t.Errorf("Test allDomainsInfo.Scan() err") 591 | } 592 | if c.Name != c2.Name || c.Code != c2.Code || c.Country != c2.Country { 593 | t.Errorf("Test allDomainsInfo.Scan() err") 594 | } 595 | err = c.Scan(nil) 596 | if err == nil { 597 | t.Errorf("Test allDomainsInfo.Scan() err") 598 | } 599 | c = nil 600 | err = c.Scan(c) 601 | if err == nil { 602 | t.Errorf("Test allDomainsInfo.Scan() err") 603 | } 604 | } 605 | } 606 | 607 | //nolint:gocyclo 608 | func TestDomainCodeByName(t *testing.T) { 609 | for _, c := range getAllCountries(t) { 610 | out := DomainCodeByName(c.String()) 611 | want := DomainCode(c) 612 | if out != want { 613 | t.Errorf("Test DomainCodeByName() err, want %v, got %v", want, out) 614 | } 615 | } 616 | out := DomainCodeByName("pupok") 617 | if out != DomainUnknown { 618 | t.Errorf("Test DomainCodeByName() err, want %v, got %v", DomainUnknown, out) 619 | } 620 | out = DomainCodeByName(None.String()) 621 | if out != DomainXX { 622 | t.Errorf("Test DomainCodeByName() err, want %v, got %v", DomainXX, out) 623 | } 624 | } 625 | 626 | // Test Regions 627 | 628 | //nolint:gocyclo 629 | func TestRegionsCount(t *testing.T) { 630 | out := TotalRegions() 631 | want := len(AllRegions()) 632 | if out != want { 633 | t.Errorf("Test AllRegions() err, want %v, got %v", want, out) 634 | } 635 | want = len(AllRegionsInfo()) 636 | if out != want { 637 | t.Errorf("Test AllRegionsInfo() err, want %v, got %v", want, out) 638 | } 639 | } 640 | 641 | /* 642 | //nolint:gocyclo 643 | func TestRegionsCode(t *testing.T) { 644 | for _, c := range AllRegions() { 645 | info := c.Info() 646 | if info == nil { 647 | t.Errorf("Test Info() err: c == nil") 648 | } 649 | if info.Name == "" || info.Name == UnknownMsg { 650 | t.Errorf("Test info.Name err, c: %v", *info) 651 | } 652 | if info.Code == RegionUnknown || info.Code != c { 653 | t.Errorf("Test info.Code err, c: %v", *info) 654 | } 655 | } 656 | } 657 | */ 658 | 659 | //nolint:gocyclo 660 | func TestRegionsIsValid(t *testing.T) { 661 | for _, c := range AllRegions() { 662 | if !c.IsValid() { 663 | t.Errorf("Test RegionCode.IsValid() err") 664 | } 665 | } 666 | for _, c := range getAllCountries(t) { 667 | if !c.Info().Region.IsValid() && c != Unknown && int(c) < 999 { 668 | t.Errorf("Test RegionCode.IsValid() err") 669 | } 670 | } 671 | } 672 | 673 | //nolint:gocyclo 674 | func TestRegionsString(t *testing.T) { 675 | for _, c := range AllRegions() { 676 | if c.String() == "" || c.String() == UnknownMsg { 677 | t.Errorf("Test RegionCode.String() err") 678 | } 679 | if c.StringRus() == "" || c.StringRus() == UnknownMsg { 680 | t.Errorf("Test RegionCode.StringRus() err") 681 | } 682 | } 683 | unknown := RegionCode(100500999) 684 | if unknown.String() != UnknownMsg { 685 | t.Errorf("Test RegionCode.String() err") 686 | } 687 | if unknown.StringRus() != UnknownMsg { 688 | t.Errorf("Test RegionCode.StringRus() err") 689 | } 690 | if RegionNone.String() == "" || RegionNone.String() == UnknownMsg { 691 | t.Errorf("Test RegionCode.String() err") 692 | } 693 | if RegionNone.StringRus() == "" || RegionNone.StringRus() == UnknownMsg { 694 | t.Errorf("Test RegionCode.StringRus() err") 695 | } 696 | } 697 | 698 | //nolint:gocyclo 699 | func TestRegionsType(t *testing.T) { 700 | for _, c := range AllRegions() { 701 | if c.Type() != TypeRegionCode { 702 | t.Errorf("Test RegionCode.Type() err") 703 | } 704 | } 705 | } 706 | 707 | //nolint:gocyclo 708 | func TestRegionsInfoValue(t *testing.T) { 709 | for _, c := range AllRegionsInfo() { 710 | _, err := c.Value() 711 | _, err2 := json.Marshal(c) 712 | if err != nil || err2 != nil { 713 | t.Errorf("Test AllRegionsInfo.Value() err") 714 | } 715 | } 716 | } 717 | 718 | //nolint:gocyclo 719 | func TestRegionsInfoType(t *testing.T) { 720 | for _, c := range AllRegionsInfo() { 721 | out := c.Type() 722 | if out != TypeRegion { 723 | t.Errorf("Test AllRegionsInfo.Type() err, want %v, got %v", TypeRegion, out) 724 | } 725 | } 726 | } 727 | 728 | //nolint:gocyclo 729 | func TestRegionsInfoScan(t *testing.T) { 730 | for _, c := range AllRegionsInfo() { 731 | err := c.Scan(c) 732 | if err != nil { 733 | t.Errorf("Test AllRegionsInfo.Scan() err") 734 | } 735 | c2 := *c 736 | err = c.Scan(c2) 737 | if err != nil { 738 | t.Errorf("Test AllRegionsInfo.Scan() err") 739 | } 740 | if c.Name != c2.Name || c.Code != c2.Code { 741 | t.Errorf("Test AllRegionsInfo.Scan() err") 742 | } 743 | err = c.Scan(nil) 744 | if err == nil { 745 | t.Errorf("Test AllRegionsInfo.Scan() err") 746 | } 747 | c = nil 748 | err = c.Scan(c) 749 | if err == nil { 750 | t.Errorf("Test AllRegionsInfo.Scan() err") 751 | } 752 | } 753 | } 754 | 755 | //nolint:gocyclo 756 | func TestRegionCodeByName(t *testing.T) { 757 | for _, c := range AllRegions() { 758 | out := RegionCodeByName(c.String()) 759 | want := RegionCode(c) 760 | if out != want { 761 | t.Errorf("Test RegionCodeByName() err, want %v, got %v", want, out) 762 | } 763 | } 764 | regionCodeOut := RegionCodeByName(None.String()) 765 | regionCodeWant := None.Region() 766 | if regionCodeOut != regionCodeWant { 767 | t.Errorf("Test RegionCodeByName() err, want %v, got %v", regionCodeWant, regionCodeOut) 768 | } 769 | regionCodeOut = RegionCodeByName("pupok") 770 | regionCodeWant = RegionUnknown 771 | if regionCodeOut != regionCodeWant { 772 | t.Errorf("Test RegionCodeByName() err, want %v, got %v", regionCodeWant, regionCodeOut) 773 | } 774 | } 775 | 776 | //nolint:gocyclo 777 | func TestCapitalCodeByName(t *testing.T) { 778 | for _, c := range AllCapitals() { 779 | capitalCodeOut := CapitalCodeByName(c.String()) 780 | if capitalCodeOut != c && c != CapitalYU && c != CapitalAQ && c != CapitalBV && c != CapitalHM && 781 | c != CapitalUM && c != CapitalTK && c != CapitalBQ { 782 | t.Errorf("Test CapitalCodeByName() err, want %v, got %v", c, capitalCodeOut) 783 | } 784 | } 785 | capitalCodeOut := CapitalCodeByName("pupok") 786 | if capitalCodeOut != CapitalUnknown { 787 | t.Errorf("Test CapitalCodeByName() err, want %v, got %v", CapitalUnknown, capitalCodeOut) 788 | } 789 | capitalCodeOut = CapitalCodeByName(None.Alpha2()) 790 | if capitalCodeOut != CapitalXX { 791 | t.Errorf("Test CapitalCodeByName() err, want %v, got %v", CapitalXX, capitalCodeOut) 792 | } 793 | } 794 | 795 | // Test Countries 796 | 797 | //nolint:gocyclo 798 | func TestCountriesCount(t *testing.T) { 799 | out := Total() 800 | want := len(All()) 801 | if out != want { 802 | t.Errorf("Test All() err, want %v, got %v", want, out) 803 | } 804 | if len(AllNonCountries()) < 10 { 805 | t.Errorf("Test allNonCountries() err") 806 | } 807 | } 808 | 809 | //nolint:gocyclo 810 | func TestCountriesType(t *testing.T) { 811 | for _, c := range getAllCountries(t) { 812 | out := c.Type() 813 | if out != TypeCountryCode { 814 | t.Errorf("Test All.Type() err, want %v, got %v", TypeCallCodeInfo, out) 815 | } 816 | } 817 | } 818 | 819 | //nolint:gocyclo 820 | func TestCountriesCode(t *testing.T) { 821 | for _, c := range getAllCountries(t) { 822 | out2 := c.Info().Code 823 | if out2 != c { 824 | t.Errorf("Test All.Info().Code err, want %v, got %v", c, out2) 825 | } 826 | } 827 | } 828 | 829 | //nolint:gocyclo 830 | func TestCountriesIsValid(t *testing.T) { 831 | for _, c := range getAllCountries(t) { 832 | if !c.IsValid() && c != Unknown { 833 | t.Errorf("Test All.IsValid() err") 834 | } 835 | } 836 | } 837 | 838 | //nolint:gocyclo 839 | func TestCountriesAlpha(t *testing.T) { 840 | for _, c := range getAllCountries(t) { 841 | if c.Alpha2() == "" || c.Alpha2() == UnknownMsg && c != Unknown { 842 | t.Errorf("Test All.Alpha2() err") 843 | } 844 | if c.Alpha3() == "" || c.Alpha3() == UnknownMsg && c != Unknown { 845 | t.Errorf("Test All.Alpha2() err") 846 | } 847 | } 848 | } 849 | 850 | //nolint:gocyclo 851 | func TestCountriesString(t *testing.T) { 852 | for _, c := range getAllCountries(t) { 853 | if (c.String() == "" || c.String() == UnknownMsg) && c != Unknown { 854 | t.Errorf("Test All.String() err") 855 | } 856 | if (c.StringRus() == "" || c.StringRus() == UnknownMsg) && c != Unknown { 857 | t.Errorf("Test All.StringRus() err") 858 | } 859 | } 860 | } 861 | 862 | //nolint:gocyclo 863 | func TestCountriesEmoji(t *testing.T) { 864 | for _, c := range getAllCountries(t) { 865 | if c.Emoji() == "" || c.Emoji() == UnknownMsg { 866 | t.Errorf("Test All.Emoji() err") 867 | } 868 | if c.Emoji3() == "" || c.Emoji3() == UnknownMsg { 869 | t.Errorf("Test All.Emoji3() err") 870 | } 871 | } 872 | } 873 | 874 | //nolint:gocyclo 875 | func TestCountriesFIFA(t *testing.T) { 876 | for _, c := range getAllCountries(t) { 877 | if (c.FIFA() == "" || c.FIFA() == UnknownMsg) && c != Unknown { 878 | t.Errorf("Test All.FIFA() err") 879 | } 880 | } 881 | } 882 | 883 | //nolint:gocyclo 884 | func TestCountriesFIPS(t *testing.T) { 885 | for _, c := range getAllCountries(t) { 886 | if (c.FIPS() == "" || c.FIPS() == UnknownMsg) && c != Unknown { 887 | t.Errorf("Test All.FIPS() err") 888 | } 889 | } 890 | } 891 | 892 | //nolint:gocyclo 893 | func TestCountriesIOC(t *testing.T) { 894 | for _, c := range getAllCountries(t) { 895 | if (c.IOC() == "" || c.IOC() == UnknownMsg) && c != Unknown { 896 | t.Errorf("Test All.IOC() err") 897 | } 898 | } 899 | } 900 | 901 | //nolint:gocyclo 902 | func TestCountriesCapital(t *testing.T) { 903 | for _, c := range getAllCountries(t) { 904 | if (c.Capital() == CapitalUnknown) && c != Unknown { 905 | t.Errorf("Test All.Capital() err") 906 | } 907 | } 908 | } 909 | 910 | //nolint:gocyclo 911 | func TestCountriesCurrency(t *testing.T) { 912 | for _, c := range getAllCountries(t) { 913 | if c.Currency() == CurrencyUnknown && c != ATA && c != Unknown { 914 | t.Errorf("Test All.Currency() err") 915 | } 916 | } 917 | if ChannelIslands.Currency() != CurrencyEUR { 918 | t.Errorf("Test All.Currency() err") 919 | } 920 | } 921 | 922 | //nolint:gocyclo 923 | func TestCountriesDomain(t *testing.T) { 924 | for _, c := range getAllCountries(t) { 925 | if c.Domain() == DomainUnknown && c != Unknown { 926 | t.Errorf("Test All.Domain() err") 927 | } 928 | } 929 | } 930 | 931 | //nolint:gocyclo 932 | func TestCountriesRegion(t *testing.T) { 933 | for _, c := range getAllCountries(t) { 934 | if c.Region() == RegionUnknown && c != Unknown { 935 | t.Errorf("Test All.Region() err") 936 | } 937 | } 938 | } 939 | 940 | //nolint:gocyclo 941 | func TestCountriesCallCodes(t *testing.T) { 942 | for _, c := range getAllCountries(t) { 943 | if len(c.CallCodes()) < 1 && c != None { 944 | t.Errorf("Test All.CallCodes() err") 945 | } 946 | } 947 | } 948 | 949 | // Test Capitals 950 | 951 | //nolint:gocyclo 952 | func TestCapitalsCount(t *testing.T) { 953 | out := TotalCapitals() 954 | want := len(AllCapitals()) 955 | if out != want { 956 | t.Errorf("Test AllCapitals() err, want %v, got %v", want, out) 957 | } 958 | want = len(AllCapitalsInfo()) 959 | if out != want { 960 | t.Errorf("Test AllCapitalsInfo() err, want %v, got %v", want, out) 961 | } 962 | } 963 | 964 | //nolint:gocyclo 965 | func TestCapitalsCode(t *testing.T) { 966 | for _, c := range AllCapitals() { 967 | info := c.Info() 968 | if info.Country == Unknown { 969 | t.Errorf("Test info.Country err, c: %v", *info) 970 | } 971 | } 972 | } 973 | 974 | //nolint:gocyclo 975 | func TestCapitalsIsValid(t *testing.T) { 976 | for _, c := range AllCapitals() { 977 | if !c.IsValid() && c != CapitalUnknown { 978 | t.Errorf("Test CapitalCode.IsValid() err") 979 | } 980 | } 981 | } 982 | 983 | //nolint:gocyclo 984 | func TestCapitalsString(t *testing.T) { 985 | for _, c := range AllCapitals() { 986 | if c.String() == "" || c.String() == UnknownMsg { 987 | t.Errorf("Test CapitalCode.String() err") 988 | } 989 | } 990 | } 991 | 992 | //nolint:gocyclo 993 | func TestCapitalsType(t *testing.T) { 994 | for _, c := range AllCapitals() { 995 | if c.Type() != TypeCapitalCode { 996 | t.Errorf("Test CapitalsCode.Type() err") 997 | } 998 | } 999 | } 1000 | 1001 | //nolint:gocyclo 1002 | func TestCapitalsCountry(t *testing.T) { //nolint:gocyclo 1003 | for _, c := range AllCapitals() { 1004 | if c.Country() == Unknown { 1005 | t.Errorf("Test CapitalsCode.Country() err") 1006 | } 1007 | } 1008 | } 1009 | 1010 | //nolint:gocyclo 1011 | func TestCapitalsInfo(t *testing.T) { 1012 | for _, c := range AllCapitals() { 1013 | if c.Info().Code != c { 1014 | t.Errorf("Test AllCapitals() err, want %v, got %v", c, c.Info().Code) 1015 | } 1016 | } 1017 | for _, c := range getAllCountries(t) { 1018 | if c.Info().Capital.Info().Code != c.Info().Capital { 1019 | t.Errorf("Test c.Capital.Info() err, c: %v", c) 1020 | } 1021 | } 1022 | } 1023 | 1024 | //nolint:gocyclo 1025 | func TestCapitalsInfoValue(t *testing.T) { 1026 | for _, c := range AllCapitalsInfo() { 1027 | _, err := c.Value() 1028 | _, err2 := json.Marshal(c) 1029 | if err != nil || err2 != nil { 1030 | t.Errorf("Test AllCapitalsInfo.Value() err") 1031 | } 1032 | } 1033 | } 1034 | 1035 | //nolint:gocyclo 1036 | func TestCapitalsInfoType(t *testing.T) { 1037 | for _, c := range AllCapitalsInfo() { 1038 | out := c.Type() 1039 | if out != TypeCapital { 1040 | t.Errorf("Test AllCapitalsInfo.Type() err, want %v, got %v", TypeCallCodeInfo, out) 1041 | } 1042 | } 1043 | } 1044 | 1045 | //nolint:gocyclo 1046 | func TestCapitalsInfoScan(t *testing.T) { 1047 | for _, c := range AllCapitalsInfo() { 1048 | err := c.Scan(c) 1049 | if err != nil { 1050 | t.Errorf("Test AllCapitalsInfo.Scan() err") 1051 | } 1052 | c2 := *c 1053 | err = c.Scan(c2) 1054 | if err != nil { 1055 | t.Errorf("Test AllCapitalsInfo.Scan() err") 1056 | } 1057 | if c.Name != c2.Name || c.Code != c2.Code || c.Country != c2.Country { 1058 | t.Errorf("Test AllCapitalsInfo.Scan() err") 1059 | } 1060 | err = c.Scan(nil) 1061 | if err == nil { 1062 | t.Errorf("Test AllCapitalsInfo.Scan() err") 1063 | } 1064 | c = nil 1065 | err = c.Scan(c) 1066 | if err == nil { 1067 | t.Errorf("Test AllCapitalsInfo.Scan() err") 1068 | } 1069 | } 1070 | } 1071 | -------------------------------------------------------------------------------- /currenciesconst.go: -------------------------------------------------------------------------------- 1 | package countries 2 | 3 | // TypeCurrencyCode for Typer interface 4 | const TypeCurrencyCode string = "countries.CurrencyCode" 5 | 6 | // TypeCurrency for Typer interface 7 | const TypeCurrency string = "countries.Currency" 8 | 9 | // Currencies. Two codes present, for example CurrencyUSDollar == CurrencyUSD == 840. 10 | const ( 11 | CurrencyUnknown CurrencyCode = 0 12 | CurrencyAfghani CurrencyCode = 971 13 | CurrencyLek CurrencyCode = 8 14 | CurrencyAlgerianDinar CurrencyCode = 12 15 | CurrencyUSDollar CurrencyCode = 840 16 | CurrencyEuro CurrencyCode = 978 17 | CurrencyKwanza CurrencyCode = 973 18 | CurrencyEastCaribbeanDollar CurrencyCode = 951 19 | CurrencyArgentinePeso CurrencyCode = 32 20 | CurrencyArmenianDram CurrencyCode = 51 21 | CurrencyArubanFlorin CurrencyCode = 533 22 | CurrencyAustralianDollar CurrencyCode = 36 23 | CurrencyAzerbaijanianManat CurrencyCode = 944 24 | CurrencyBahamianDollar CurrencyCode = 44 25 | CurrencyBahrainiDinar CurrencyCode = 48 26 | CurrencyTaka CurrencyCode = 50 27 | CurrencyBarbadosDollar CurrencyCode = 52 28 | CurrencyBelarussianRuble CurrencyCode = 933 29 | CurrencyBelizeDollar CurrencyCode = 84 30 | CurrencyCFAFrancBCEAO CurrencyCode = 952 31 | CurrencyBermudianDollar CurrencyCode = 60 32 | CurrencyNgultrum CurrencyCode = 64 33 | CurrencyIndianRupee CurrencyCode = 356 34 | CurrencyBoliviano CurrencyCode = 68 35 | CurrencyConvertibleMark CurrencyCode = 977 36 | CurrencyPula CurrencyCode = 72 37 | CurrencyNorwegianKrone CurrencyCode = 578 38 | CurrencyBrazilianReal CurrencyCode = 986 39 | CurrencyBruneiDollar CurrencyCode = 96 40 | CurrencyBulgarianLev CurrencyCode = 975 41 | CurrencyBurundiFranc CurrencyCode = 108 42 | CurrencyCaboVerdeEscudo CurrencyCode = 132 43 | CurrencyRiel CurrencyCode = 116 44 | CurrencyCFAFrancBEAC CurrencyCode = 950 45 | CurrencyCanadianDollar CurrencyCode = 124 46 | CurrencyCaymanIslandsDollar CurrencyCode = 136 47 | CurrencyUnidaddeFomento CurrencyCode = 990 48 | CurrencyChileanPeso CurrencyCode = 152 49 | CurrencyYuanRenminbi CurrencyCode = 156 50 | CurrencyColombianPeso CurrencyCode = 170 51 | CurrencyUnidaddeValorReal CurrencyCode = 970 52 | CurrencyComoroFranc CurrencyCode = 174 53 | CurrencyCongoleseFranc CurrencyCode = 976 54 | CurrencyNewZealandDollar CurrencyCode = 554 55 | CurrencyCostaRicanColon CurrencyCode = 188 56 | CurrencyKuna CurrencyCode = 191 57 | CurrencyPesoConvertible CurrencyCode = 931 58 | CurrencyCubanPeso CurrencyCode = 192 59 | CurrencyNetherlandsAntilleanGuilder CurrencyCode = 532 60 | CurrencyCzechKoruna CurrencyCode = 203 61 | CurrencyDanishKrone CurrencyCode = 208 62 | CurrencyDjiboutiFranc CurrencyCode = 262 63 | CurrencyDominicanPeso CurrencyCode = 214 64 | CurrencyEgyptianPound CurrencyCode = 818 65 | CurrencyElSalvadorColon CurrencyCode = 222 66 | CurrencyNakfa CurrencyCode = 232 67 | CurrencyEthiopianBirr CurrencyCode = 230 68 | CurrencyFalklandIslandsPound CurrencyCode = 238 69 | CurrencyFijiDollar CurrencyCode = 242 70 | CurrencyCFPFranc CurrencyCode = 953 71 | CurrencyDalasi CurrencyCode = 270 72 | CurrencyLari CurrencyCode = 981 73 | CurrencyGhanaCedi CurrencyCode = 936 74 | CurrencyGibraltarPound CurrencyCode = 292 75 | CurrencyQuetzal CurrencyCode = 320 76 | CurrencyPoundSterling CurrencyCode = 826 77 | CurrencyGuineaFranc CurrencyCode = 324 78 | CurrencyGuyanaDollar CurrencyCode = 328 79 | CurrencyGourde CurrencyCode = 332 80 | CurrencyLempira CurrencyCode = 340 81 | CurrencyHongKongDollar CurrencyCode = 344 82 | CurrencyForint CurrencyCode = 348 83 | CurrencyIcelandKrona CurrencyCode = 352 84 | CurrencyRupiah CurrencyCode = 360 85 | CurrencySDR CurrencyCode = 960 86 | CurrencyIranianRial CurrencyCode = 364 87 | CurrencyIraqiDinar CurrencyCode = 368 88 | CurrencyNewIsraeliSheqel CurrencyCode = 376 89 | CurrencyJamaicanDollar CurrencyCode = 388 90 | CurrencyYen CurrencyCode = 392 91 | CurrencyJordanianDinar CurrencyCode = 400 92 | CurrencyTenge CurrencyCode = 398 93 | CurrencyKenyanShilling CurrencyCode = 404 94 | CurrencyNorthKoreanWon CurrencyCode = 408 95 | CurrencyWon CurrencyCode = 410 96 | CurrencyKuwaitiDinar CurrencyCode = 414 97 | CurrencySom CurrencyCode = 417 98 | CurrencyKip CurrencyCode = 418 99 | CurrencyLebanesePound CurrencyCode = 422 100 | CurrencyLoti CurrencyCode = 426 101 | CurrencyRand CurrencyCode = 710 102 | CurrencyLiberianDollar CurrencyCode = 430 103 | CurrencyLibyanDinar CurrencyCode = 434 104 | CurrencySwissFranc CurrencyCode = 756 105 | CurrencyPataca CurrencyCode = 446 106 | CurrencyDenar CurrencyCode = 807 107 | CurrencyMalagasyAriary CurrencyCode = 969 108 | CurrencyKwacha CurrencyCode = 454 109 | CurrencyMalaysianRinggit CurrencyCode = 458 110 | CurrencyRufiyaa CurrencyCode = 462 111 | CurrencyOuguiya CurrencyCode = 929 112 | CurrencyMauritiusRupee CurrencyCode = 480 113 | CurrencyADBUnitofAccount CurrencyCode = 965 114 | CurrencyMexicanPeso CurrencyCode = 484 115 | CurrencyMexicanUnidaddeInversion CurrencyCode = 979 116 | CurrencyMexicanUDI CurrencyCode = 979 117 | CurrencyMoldovanLeu CurrencyCode = 498 118 | CurrencyTugrik CurrencyCode = 496 119 | CurrencyMoroccanDirham CurrencyCode = 504 120 | CurrencyMozambiqueMetical CurrencyCode = 943 121 | CurrencyKyat CurrencyCode = 104 122 | CurrencyNamibiaDollar CurrencyCode = 516 123 | CurrencyNepaleseRupee CurrencyCode = 524 124 | CurrencyCordobaOro CurrencyCode = 558 125 | CurrencyNaira CurrencyCode = 566 126 | CurrencyRialOmani CurrencyCode = 512 127 | CurrencyPakistanRupee CurrencyCode = 586 128 | CurrencyBalboa CurrencyCode = 590 129 | CurrencyKina CurrencyCode = 598 130 | CurrencyGuarani CurrencyCode = 600 131 | CurrencyNuevoSol CurrencyCode = 604 132 | CurrencyPhilippinePeso CurrencyCode = 608 133 | CurrencyZloty CurrencyCode = 985 134 | CurrencyQatariRial CurrencyCode = 634 135 | CurrencyRomanianLeu CurrencyCode = 946 136 | CurrencyRussianRuble CurrencyCode = 643 137 | CurrencyRwandaFranc CurrencyCode = 646 138 | CurrencySaintHelenaPound CurrencyCode = 654 139 | CurrencyTala CurrencyCode = 882 140 | CurrencyDobra CurrencyCode = 930 141 | CurrencySaudiRiyal CurrencyCode = 682 142 | CurrencySerbianDinar CurrencyCode = 941 143 | CurrencySeychellesRupee CurrencyCode = 690 144 | CurrencyLeone CurrencyCode = 694 145 | CurrencySingaporeDollar CurrencyCode = 702 146 | CurrencySucre CurrencyCode = 994 147 | CurrencySolomonIslandsDollar CurrencyCode = 90 148 | CurrencySomaliShilling CurrencyCode = 706 149 | CurrencySouthSudanesePound CurrencyCode = 728 150 | CurrencySriLankaRupee CurrencyCode = 144 151 | CurrencySudanesePound CurrencyCode = 938 152 | CurrencySurinamDollar CurrencyCode = 968 153 | CurrencyLilangeni CurrencyCode = 748 154 | CurrencySwedishKrona CurrencyCode = 752 155 | CurrencyWIREuro CurrencyCode = 947 156 | CurrencyWIRFranc CurrencyCode = 948 157 | CurrencySyrianPound CurrencyCode = 760 158 | CurrencyNewTaiwanDollar CurrencyCode = 901 159 | CurrencySomoni CurrencyCode = 972 160 | CurrencyTanzanianShilling CurrencyCode = 834 161 | CurrencyBaht CurrencyCode = 764 162 | CurrencyPaanga CurrencyCode = 776 163 | CurrencyTrinidadandTobagoDollar CurrencyCode = 780 164 | CurrencyTunisianDinar CurrencyCode = 788 165 | CurrencyTurkishLira CurrencyCode = 949 166 | CurrencyTurkmenistanNewManat CurrencyCode = 934 167 | CurrencyUgandaShilling CurrencyCode = 800 168 | CurrencyHryvnia CurrencyCode = 980 169 | CurrencyUAEDirham CurrencyCode = 784 170 | CurrencyUSDollarNextday CurrencyCode = 997 171 | CurrencyUruguayPesoenUnidadesIndexadas CurrencyCode = 940 172 | CurrencyUruguayPUI CurrencyCode = 940 173 | CurrencyURUIURUI CurrencyCode = 940 174 | CurrencyPesoUruguayo CurrencyCode = 858 175 | CurrencyUzbekistanSum CurrencyCode = 860 176 | CurrencyVatu CurrencyCode = 548 177 | CurrencyBolivar CurrencyCode = 928 178 | CurrencyBolivarDeprecated CurrencyCode = 937 179 | CurrencyDong CurrencyCode = 704 180 | CurrencyYemeniRial CurrencyCode = 886 181 | CurrencyZambianKwacha CurrencyCode = 967 182 | CurrencyZimbabweDollar CurrencyCode = 932 183 | CurrencyYugoslavianDinar CurrencyCode = 891 184 | CurrencyNone CurrencyCode = 998 185 | ) 186 | 187 | // Currencies by ISO 4217. Two codes present, for example CurrencyUSDollar == CurrencyUSD == 840. 188 | const ( 189 | CurrencyAFN CurrencyCode = 971 190 | CurrencyALL CurrencyCode = 8 191 | CurrencyDZD CurrencyCode = 12 192 | CurrencyUSD CurrencyCode = 840 193 | CurrencyEUR CurrencyCode = 978 194 | CurrencyAOA CurrencyCode = 973 195 | CurrencyXCD CurrencyCode = 951 196 | CurrencyARS CurrencyCode = 32 197 | CurrencyAMD CurrencyCode = 51 198 | CurrencyAWG CurrencyCode = 533 199 | CurrencyAUD CurrencyCode = 36 200 | CurrencyAZN CurrencyCode = 944 201 | CurrencyBSD CurrencyCode = 44 202 | CurrencyBHD CurrencyCode = 48 203 | CurrencyBDT CurrencyCode = 50 204 | CurrencyBBD CurrencyCode = 52 205 | CurrencyBYN CurrencyCode = 933 206 | CurrencyBZD CurrencyCode = 84 207 | CurrencyXOF CurrencyCode = 952 208 | CurrencyBMD CurrencyCode = 60 209 | CurrencyBTN CurrencyCode = 64 210 | CurrencyINR CurrencyCode = 356 211 | CurrencyBOB CurrencyCode = 68 212 | CurrencyBAM CurrencyCode = 977 213 | CurrencyBWP CurrencyCode = 72 214 | CurrencyNOK CurrencyCode = 578 215 | CurrencyBRL CurrencyCode = 986 216 | CurrencyBND CurrencyCode = 96 217 | CurrencyBGN CurrencyCode = 975 218 | CurrencyBIF CurrencyCode = 108 219 | CurrencyCVE CurrencyCode = 132 220 | CurrencyKHR CurrencyCode = 116 221 | CurrencyXAF CurrencyCode = 950 222 | CurrencyCAD CurrencyCode = 124 223 | CurrencyKYD CurrencyCode = 136 224 | CurrencyCLF CurrencyCode = 990 225 | CurrencyCLP CurrencyCode = 152 226 | CurrencyCNY CurrencyCode = 156 227 | CurrencyCOP CurrencyCode = 170 228 | CurrencyCOU CurrencyCode = 970 229 | CurrencyKMF CurrencyCode = 174 230 | CurrencyCDF CurrencyCode = 976 231 | CurrencyNZD CurrencyCode = 554 232 | CurrencyCRC CurrencyCode = 188 233 | // Deprecated: Croatian Kuna is no longer in circulation, use CurrencyEUR instead. 234 | CurrencyHRK CurrencyCode = 191 235 | CurrencyCUC CurrencyCode = 931 236 | CurrencyCUP CurrencyCode = 192 237 | CurrencyANG CurrencyCode = 532 238 | CurrencyCZK CurrencyCode = 203 239 | CurrencyDKK CurrencyCode = 208 240 | CurrencyDJF CurrencyCode = 262 241 | CurrencyDOP CurrencyCode = 214 242 | CurrencyEGP CurrencyCode = 818 243 | CurrencySVC CurrencyCode = 222 244 | CurrencyERN CurrencyCode = 232 245 | CurrencyETB CurrencyCode = 230 246 | CurrencyFKP CurrencyCode = 238 247 | CurrencyFJD CurrencyCode = 242 248 | CurrencyXPF CurrencyCode = 953 249 | CurrencyGMD CurrencyCode = 270 250 | CurrencyGEL CurrencyCode = 981 251 | CurrencyGHS CurrencyCode = 936 252 | CurrencyGIP CurrencyCode = 292 253 | CurrencyGTQ CurrencyCode = 320 254 | CurrencyGBP CurrencyCode = 826 255 | CurrencyGNF CurrencyCode = 324 256 | CurrencyGYD CurrencyCode = 328 257 | CurrencyHTG CurrencyCode = 332 258 | CurrencyHNL CurrencyCode = 340 259 | CurrencyHKD CurrencyCode = 344 260 | CurrencyHUF CurrencyCode = 348 261 | CurrencyISK CurrencyCode = 352 262 | CurrencyIDR CurrencyCode = 360 263 | CurrencyXDR CurrencyCode = 960 264 | CurrencyIRR CurrencyCode = 364 265 | CurrencyIQD CurrencyCode = 368 266 | CurrencyILS CurrencyCode = 376 267 | CurrencyJMD CurrencyCode = 388 268 | CurrencyJPY CurrencyCode = 392 269 | CurrencyJOD CurrencyCode = 400 270 | CurrencyKZT CurrencyCode = 398 271 | CurrencyKES CurrencyCode = 404 272 | CurrencyKPW CurrencyCode = 408 273 | CurrencyKRW CurrencyCode = 410 274 | CurrencyKWD CurrencyCode = 414 275 | CurrencyKGS CurrencyCode = 417 276 | CurrencyLAK CurrencyCode = 418 277 | CurrencyLBP CurrencyCode = 422 278 | CurrencyLSL CurrencyCode = 426 279 | CurrencyZAR CurrencyCode = 710 280 | CurrencyLRD CurrencyCode = 430 281 | CurrencyLYD CurrencyCode = 434 282 | CurrencyCHF CurrencyCode = 756 283 | CurrencyMOP CurrencyCode = 446 284 | CurrencyMKD CurrencyCode = 807 285 | CurrencyMGA CurrencyCode = 969 286 | CurrencyMWK CurrencyCode = 454 287 | CurrencyMYR CurrencyCode = 458 288 | CurrencyMVR CurrencyCode = 462 289 | CurrencyMRU CurrencyCode = 929 290 | CurrencyMUR CurrencyCode = 480 291 | CurrencyXUA CurrencyCode = 965 292 | CurrencyMXN CurrencyCode = 484 293 | CurrencyMXV CurrencyCode = 979 294 | CurrencyMDL CurrencyCode = 498 295 | CurrencyMNT CurrencyCode = 496 296 | CurrencyMAD CurrencyCode = 504 297 | CurrencyMZN CurrencyCode = 943 298 | CurrencyMMK CurrencyCode = 104 299 | CurrencyNAD CurrencyCode = 516 300 | CurrencyNPR CurrencyCode = 524 301 | CurrencyNIO CurrencyCode = 558 302 | CurrencyNGN CurrencyCode = 566 303 | CurrencyOMR CurrencyCode = 512 304 | CurrencyPKR CurrencyCode = 586 305 | CurrencyPAB CurrencyCode = 590 306 | CurrencyPGK CurrencyCode = 598 307 | CurrencyPYG CurrencyCode = 600 308 | CurrencyPEN CurrencyCode = 604 309 | CurrencyPHP CurrencyCode = 608 310 | CurrencyPLN CurrencyCode = 985 311 | CurrencyQAR CurrencyCode = 634 312 | CurrencyRON CurrencyCode = 946 313 | CurrencyRUB CurrencyCode = 643 314 | CurrencyRWF CurrencyCode = 646 315 | CurrencySHP CurrencyCode = 654 316 | CurrencyWST CurrencyCode = 882 317 | CurrencySTN CurrencyCode = 930 318 | CurrencySAR CurrencyCode = 682 319 | CurrencyRSD CurrencyCode = 941 320 | CurrencySCR CurrencyCode = 690 321 | CurrencySLL CurrencyCode = 694 322 | CurrencySGD CurrencyCode = 702 323 | CurrencyXSU CurrencyCode = 994 324 | CurrencySBD CurrencyCode = 90 325 | CurrencySOS CurrencyCode = 706 326 | CurrencySSP CurrencyCode = 728 327 | CurrencyLKR CurrencyCode = 144 328 | CurrencySDG CurrencyCode = 938 329 | CurrencySRD CurrencyCode = 968 330 | CurrencySZL CurrencyCode = 748 331 | CurrencySEK CurrencyCode = 752 332 | CurrencyCHE CurrencyCode = 947 333 | CurrencyCHW CurrencyCode = 948 334 | CurrencySYP CurrencyCode = 760 335 | CurrencyTWD CurrencyCode = 901 336 | CurrencyTJS CurrencyCode = 972 337 | CurrencyTZS CurrencyCode = 834 338 | CurrencyTHB CurrencyCode = 764 339 | CurrencyTOP CurrencyCode = 776 340 | CurrencyTTD CurrencyCode = 780 341 | CurrencyTND CurrencyCode = 788 342 | CurrencyTRY CurrencyCode = 949 343 | CurrencyTMT CurrencyCode = 934 344 | CurrencyUGX CurrencyCode = 800 345 | CurrencyUAH CurrencyCode = 980 346 | CurrencyAED CurrencyCode = 784 347 | CurrencyUSN CurrencyCode = 997 348 | CurrencyUYI CurrencyCode = 940 349 | CurrencyUYU CurrencyCode = 858 350 | CurrencyUZS CurrencyCode = 860 351 | CurrencyVUV CurrencyCode = 548 352 | CurrencyVES CurrencyCode = 928 353 | CurrencyVEF CurrencyCode = 937 354 | CurrencyVND CurrencyCode = 704 355 | CurrencyYER CurrencyCode = 886 356 | CurrencyZMW CurrencyCode = 967 357 | CurrencyZWL CurrencyCode = 932 358 | CurrencyYUD CurrencyCode = 891 359 | CurrencyNON CurrencyCode = 998 360 | ) 361 | -------------------------------------------------------------------------------- /data/iso-codes/data_iso_3166-3.json: -------------------------------------------------------------------------------- 1 | { 2 | "3166-3": [ 3 | { 4 | "alpha_2": "AI", 5 | "alpha_3": "AFI", 6 | "alpha_4": "AIDJ", 7 | "name": "French Afars and Issas", 8 | "numeric": "262", 9 | "withdrawal_date": "1977" 10 | }, 11 | { 12 | "alpha_2": "AN", 13 | "alpha_3": "ANT", 14 | "alpha_4": "ANHH", 15 | "name": "Netherlands Antilles", 16 | "numeric": "530", 17 | "withdrawal_date": "1993-07-12" 18 | }, 19 | { 20 | "alpha_2": "BQ", 21 | "alpha_3": "ATB", 22 | "alpha_4": "BQAQ", 23 | "name": "British Antarctic Territory", 24 | "withdrawal_date": "1979" 25 | }, 26 | { 27 | "alpha_2": "BU", 28 | "alpha_3": "BUR", 29 | "alpha_4": "BUMM", 30 | "name": "Burma, Socialist Republic of the Union of", 31 | "numeric": "104", 32 | "withdrawal_date": "1989-12-05" 33 | }, 34 | { 35 | "alpha_2": "BY", 36 | "alpha_3": "BYS", 37 | "alpha_4": "BYAA", 38 | "name": "Byelorussian SSR Soviet Socialist Republic", 39 | "numeric": "112", 40 | "withdrawal_date": "1992-06-15" 41 | }, 42 | { 43 | "alpha_2": "CS", 44 | "alpha_3": "CSK", 45 | "alpha_4": "CSHH", 46 | "name": "Czechoslovakia, Czechoslovak Socialist Republic", 47 | "numeric": "200", 48 | "withdrawal_date": "1993-06-15" 49 | }, 50 | { 51 | "alpha_2": "CS", 52 | "alpha_3": "SCG", 53 | "alpha_4": "CSXX", 54 | "name": "Serbia and Montenegro", 55 | "numeric": "891", 56 | "withdrawal_date": "2006-06-05" 57 | }, 58 | { 59 | "alpha_2": "CT", 60 | "alpha_3": "CTE", 61 | "alpha_4": "CTKI", 62 | "name": "Canton and Enderbury Islands", 63 | "numeric": "128", 64 | "withdrawal_date": "1984" 65 | }, 66 | { 67 | "alpha_2": "DD", 68 | "alpha_3": "DDR", 69 | "alpha_4": "DDDE", 70 | "name": "German Democratic Republic", 71 | "numeric": "278", 72 | "withdrawal_date": "1990-10-30" 73 | }, 74 | { 75 | "alpha_2": "DY", 76 | "alpha_3": "DHY", 77 | "alpha_4": "DYBJ", 78 | "name": "Dahomey", 79 | "numeric": "204", 80 | "withdrawal_date": "1977" 81 | }, 82 | { 83 | "alpha_2": "FQ", 84 | "alpha_3": "ATF", 85 | "alpha_4": "FQHH", 86 | "comment": "now split between AQ and TF", 87 | "name": "French Southern and Antarctic Territories", 88 | "withdrawal_date": "1979" 89 | }, 90 | { 91 | "alpha_2": "FX", 92 | "alpha_3": "FXX", 93 | "alpha_4": "FXFR", 94 | "name": "France, Metropolitan", 95 | "numeric": "249", 96 | "withdrawal_date": "1997-07-14" 97 | }, 98 | { 99 | "alpha_2": "GE", 100 | "alpha_3": "GEL", 101 | "alpha_4": "GEHH", 102 | "comment": "now split into Kiribati and Tuvalu", 103 | "name": "Gilbert and Ellice Islands", 104 | "numeric": "296", 105 | "withdrawal_date": "1979" 106 | }, 107 | { 108 | "alpha_2": "HV", 109 | "alpha_3": "HVO", 110 | "alpha_4": "HVBF", 111 | "name": "Upper Volta, Republic of", 112 | "numeric": "854", 113 | "withdrawal_date": "1984" 114 | }, 115 | { 116 | "alpha_2": "JT", 117 | "alpha_3": "JTN", 118 | "alpha_4": "JTUM", 119 | "name": "Johnston Island", 120 | "numeric": "396", 121 | "withdrawal_date": "1986" 122 | }, 123 | { 124 | "alpha_2": "MI", 125 | "alpha_3": "MID", 126 | "alpha_4": "MIUM", 127 | "name": "Midway Islands", 128 | "numeric": "488", 129 | "withdrawal_date": "1986" 130 | }, 131 | { 132 | "alpha_2": "NH", 133 | "alpha_3": "NHB", 134 | "alpha_4": "NHVU", 135 | "name": "New Hebrides", 136 | "numeric": "548", 137 | "withdrawal_date": "1980" 138 | }, 139 | { 140 | "alpha_2": "NQ", 141 | "alpha_3": "ATN", 142 | "alpha_4": "NQAQ", 143 | "name": "Dronning Maud Land", 144 | "numeric": "216", 145 | "withdrawal_date": "1983" 146 | }, 147 | { 148 | "alpha_2": "NT", 149 | "alpha_3": "NTZ", 150 | "alpha_4": "NTHH", 151 | "comment": "formerly between Saudi Arabia and Iraq", 152 | "name": "Neutral Zone", 153 | "numeric": "536", 154 | "withdrawal_date": "1993-07-12" 155 | }, 156 | { 157 | "alpha_2": "PC", 158 | "alpha_3": "PCI", 159 | "alpha_4": "PCHH", 160 | "comment": "divided into FM, MH, MP, and PW", 161 | "name": "Pacific Islands (trust territory)", 162 | "numeric": "582", 163 | "withdrawal_date": "1986" 164 | }, 165 | { 166 | "alpha_2": "PU", 167 | "alpha_3": "PUS", 168 | "alpha_4": "PUUM", 169 | "name": "US Miscellaneous Pacific Islands", 170 | "numeric": "849", 171 | "withdrawal_date": "1986" 172 | }, 173 | { 174 | "alpha_2": "PZ", 175 | "alpha_3": "PCZ", 176 | "alpha_4": "PZPA", 177 | "name": "Panama Canal Zone", 178 | "withdrawal_date": "1980" 179 | }, 180 | { 181 | "alpha_2": "RH", 182 | "alpha_3": "RHO", 183 | "alpha_4": "RHZW", 184 | "name": "Southern Rhodesia", 185 | "numeric": "716", 186 | "withdrawal_date": "1980" 187 | }, 188 | { 189 | "alpha_2": "SK", 190 | "alpha_3": "SKM", 191 | "alpha_4": "SKIN", 192 | "name": "Sikkim", 193 | "withdrawal_date": "1975" 194 | }, 195 | { 196 | "alpha_2": "SU", 197 | "alpha_3": "SUN", 198 | "alpha_4": "SUHH", 199 | "name": "USSR, Union of Soviet Socialist Republics", 200 | "numeric": "810", 201 | "withdrawal_date": "1992-08-30" 202 | }, 203 | { 204 | "alpha_2": "TP", 205 | "alpha_3": "TMP", 206 | "alpha_4": "TPTL", 207 | "comment": "was Portuguese Timor", 208 | "name": "East Timor", 209 | "numeric": "626", 210 | "withdrawal_date": "2002-05-20" 211 | }, 212 | { 213 | "alpha_2": "VD", 214 | "alpha_3": "VDR", 215 | "alpha_4": "VDVN", 216 | "name": "Viet-Nam, Democratic Republic of", 217 | "withdrawal_date": "1977" 218 | }, 219 | { 220 | "alpha_2": "WK", 221 | "alpha_3": "WAK", 222 | "alpha_4": "WKUM", 223 | "name": "Wake Island", 224 | "numeric": "872", 225 | "withdrawal_date": "1986" 226 | }, 227 | { 228 | "alpha_2": "YD", 229 | "alpha_3": "YMD", 230 | "alpha_4": "YDYE", 231 | "name": "Yemen, Democratic, People's Democratic Republic of", 232 | "numeric": "720", 233 | "withdrawal_date": "1990-08-14" 234 | }, 235 | { 236 | "alpha_2": "YU", 237 | "alpha_3": "YUG", 238 | "alpha_4": "YUCS", 239 | "name": "Yugoslavia, Socialist Federal Republic of", 240 | "numeric": "891", 241 | "withdrawal_date": "1993-07-28" 242 | }, 243 | { 244 | "alpha_2": "ZR", 245 | "alpha_3": "ZAR", 246 | "alpha_4": "ZRCD", 247 | "name": "Zaire, Republic of", 248 | "numeric": "180", 249 | "withdrawal_date": "1997-07-14" 250 | } 251 | ] 252 | } 253 | -------------------------------------------------------------------------------- /doc/conf.py: -------------------------------------------------------------------------------- 1 | import sys 2 | 3 | sys.path.append('./') 4 | from custom_conf import * 5 | 6 | # Configuration file for the Sphinx documentation builder. 7 | # You should not do any modifications to this file. Put your custom 8 | # configuration into the custom_conf.py file. 9 | # If you need to change this file, contribute the changes upstream. 10 | # 11 | # For the full list of built-in configuration values, see the documentation: 12 | # https://www.sphinx-doc.org/en/master/usage/configuration.html 13 | 14 | ############################################################ 15 | ### Extensions 16 | ############################################################ 17 | 18 | extensions = [ 19 | 'sphinx_design', 20 | 'sphinx_tabs.tabs', 21 | 'sphinx_reredirects', 22 | 'canonical.youtube-links', 23 | 'canonical.related-links', 24 | 'canonical.custom-rst-roles', 25 | 'canonical.terminal-output', 26 | 'sphinx_copybutton', 27 | 'sphinxext.opengraph', 28 | 'myst_parser', 29 | 'sphinxcontrib.jquery', 30 | 'notfound.extension' 31 | ] 32 | extensions.extend(custom_extensions) 33 | 34 | ### Configuration for extensions 35 | 36 | # Additional MyST syntax 37 | myst_enable_extensions = [ 38 | 'substitution', 39 | 'deflist', 40 | 'linkify' 41 | ] 42 | 43 | # Used for related links 44 | if not 'discourse_prefix' in html_context and 'discourse' in html_context: 45 | html_context['discourse_prefix'] = html_context['discourse'] + '/t/' 46 | 47 | # The default for notfound_urls_prefix usually works, but not for 48 | # documentation on documentation.ubuntu.com 49 | if slug: 50 | notfound_urls_prefix = '/' + slug + '/en/latest/' 51 | 52 | notfound_context = { 53 | 'title': 'Page not found', 54 | 'body': '

Page not found

\n\n

Sorry, but the documentation page that you are looking for was not found.

\n

Documentation changes over time, and pages are moved around. We try to redirect you to the updated content where possible, but unfortunately, that didn\'t work this time (maybe because the content you were looking for does not exist in this version of the documentation).

\n

You can try to use the navigation to locate the content you\'re looking for, or search for a similar page.

\n', 55 | } 56 | 57 | # Default image for OGP (to prevent font errors, see 58 | # https://github.com/canonical/sphinx-docs-starter-pack/pull/54 ) 59 | if not 'ogp_image' in locals(): 60 | ogp_image = 'https://assets.ubuntu.com/v1/253da317-image-document-ubuntudocs.svg' 61 | 62 | ############################################################ 63 | ### General configuration 64 | ############################################################ 65 | 66 | exclude_patterns = [ 67 | '_build', 68 | 'Thumbs.db', 69 | '.DS_Store', 70 | '.sphinx', 71 | ] 72 | exclude_patterns.extend(custom_excludes) 73 | 74 | rst_epilog = ''' 75 | .. include:: /reuse/links.txt 76 | ''' 77 | if 'custom_rst_epilog' in locals(): 78 | rst_epilog = custom_rst_epilog 79 | 80 | source_suffix = { 81 | '.rst': 'restructuredtext', 82 | '.md': 'markdown', 83 | } 84 | 85 | if not 'conf_py_path' in html_context and 'github_folder' in html_context: 86 | html_context['conf_py_path'] = html_context['github_folder'] 87 | 88 | # For ignoring specific links 89 | linkcheck_anchors_ignore_for_url = [ 90 | r'https://github\.com/.*' 91 | ] 92 | linkcheck_anchors_ignore_for_url.extend(custom_linkcheck_anchors_ignore_for_url) 93 | 94 | for tag in custom_tags: 95 | tags.add(tag) 96 | 97 | ############################################################ 98 | ### Styling 99 | ############################################################ 100 | 101 | # Find the current builder 102 | builder = 'dirhtml' 103 | if '-b' in sys.argv: 104 | builder = sys.argv[sys.argv.index('-b')+1] 105 | 106 | # Setting templates_path for epub makes the build fail 107 | if builder == 'dirhtml' or builder == 'html': 108 | templates_path = ['.sphinx/_templates'] 109 | 110 | # Theme configuration 111 | html_theme = 'furo' 112 | html_last_updated_fmt = '' 113 | html_permalinks_icon = '¶' 114 | 115 | ############################################################ 116 | ### Additional files 117 | ############################################################ 118 | 119 | html_static_path = ['.sphinx/_static'] 120 | 121 | html_css_files = [ 122 | 'custom.css', 123 | 'header.css', 124 | 'github_issue_links.css', 125 | 'furo_colors.css' 126 | ] 127 | html_css_files.extend(custom_html_css_files) 128 | 129 | html_js_files = ['header-nav.js'] 130 | if 'github_issues' in html_context and html_context['github_issues'] and not disable_feedback_button: 131 | html_js_files.append('github_issue_links.js') 132 | html_js_files.extend(custom_html_js_files) -------------------------------------------------------------------------------- /doc/mkdocs.yml: -------------------------------------------------------------------------------- 1 | ### General information 2 | 3 | ## Authoring 4 | 5 | # Displayed site name 6 | site_name: Material for MkDocs setup and reference 7 | # ? 8 | site_author: Flag Hunter 9 | # Site description (overridden by page descriptions) 10 | site_description: Quick reference page that helps setting up Material for MkDocs and using advanced markdown functionnalities 11 | # Site URL needed by the social plugin 12 | site_url: https://FlagHuner01.github.io/mkdocs-yml/ 13 | # Copyright notice in footer 14 | copyright: Copyright © Flag Hunter 15 | 16 | ## Git 17 | 18 | # Git repository 19 | repo_url: https://github.com/FlagHunter01/mkdocs-yml 20 | # Name of the repository 21 | repo_name: FlagHunter01/mkdocs-yml 22 | # Enables page modification 23 | edit_uri: edit/main/docs 24 | 25 | 26 | ### Site layout 27 | 28 | nav: 29 | - Home: index.md 30 | 31 | 32 | 33 | ### Theme customization 34 | 35 | theme: 36 | # Enable Material theme 37 | name: material 38 | 39 | # Font options 40 | font: 41 | text: Roboto 42 | code: Roboto Mono 43 | 44 | # Language selection. 45 | # For multiple languages, create multiple projects and link them with the language selector 46 | language: en 47 | 48 | # Logo as an image 49 | #logo: assets/logo.png 50 | # logo as an icon 51 | # Find 'em here: https://squidfunk.github.io/mkdocs-material/reference/icons-emojis/#search 52 | icon: 53 | logo: material/rocket 54 | 55 | # Favicon can be set as an image 56 | #favicon: 57 | 58 | ## Color palette 59 | palette: 60 | 61 | # Palette toggle for automatic mode 62 | - media: "(prefers-color-scheme)" 63 | toggle: 64 | icon: material/brightness-auto 65 | name: Switch to light mode 66 | 67 | # Palette toggle for light mode 68 | - media: "(prefers-color-scheme: light)" 69 | scheme: default 70 | toggle: 71 | icon: material/brightness-7 72 | name: Switch to dark mode 73 | #primary: 74 | #accent: 75 | 76 | # Palette toggle for dark mode 77 | - media: "(prefers-color-scheme: dark)" 78 | scheme: slate 79 | toggle: 80 | icon: material/brightness-4 81 | name: Switch to system preference 82 | #primary: 83 | #accent: 84 | 85 | features: 86 | ## Site navigation 87 | 88 | # Single Page Application 89 | - navigation.instant 90 | # Automatic anchor update in URL 91 | - navigation.tracking 92 | # Tabs in the top menu 93 | - navigation.tabs 94 | # Breadcrumbs at the top of pages 95 | - navigation.path 96 | # Option to make overview pages for subfolders 97 | # This page must be subfoler/index.md 98 | - navigation.indexes 99 | # Sidebar following / opening as you read 100 | - toc.follow 101 | # Back-to-top button 102 | - navigation.top 103 | # Previous/Next links in footer 104 | - navigation.footer 105 | 106 | ## Site search 107 | 108 | # Auto completion 109 | - search.suggest 110 | # Match highlight 111 | - search.highlight 112 | 113 | ## Announcement bars 114 | 115 | # Option to mark the announcement as read 116 | - announce.dismiss 117 | 118 | ## Git page info 119 | 120 | # Button for page edition 121 | - content.action.edit 122 | 123 | ## Code 124 | 125 | # Copy code 126 | - content.code.copy 127 | # Line selection 128 | - content.code.select 129 | # Add annotations to code 130 | - content.code.annotate 131 | 132 | ## Content tabs 133 | 134 | # Linked content tabs 135 | - content.tabs.link 136 | 137 | ## Tooltips 138 | - content.tooltips 139 | 140 | 141 | 142 | 143 | 144 | 145 | ### Plugins 146 | plugins: 147 | # Downloads everything localy 148 | #- privacy 149 | # Search bar 150 | - search 151 | # Social cards and image formating 152 | - social: 153 | cards_layout: default/variant 154 | # Blog. 155 | # Setup info here: https://squidfunk.github.io/mkdocs-material/setup/setting-up-a-blog/#setting-up-a-blog 156 | #- blog 157 | # Creation and modofication dates 158 | - git-revision-date-localized: 159 | enable_creation_date: true 160 | type: timeago 161 | fallback_to_build_date: true 162 | # GutHub contributors 163 | - git-committers: 164 | repository: FlagHunter01/material-yml 165 | branch: main 166 | # Loading optimization 167 | #- optimize 168 | # Make search work offline and other offline ajustments 169 | #- offline 170 | # Formatting persists in titles 171 | #- typeset 172 | # Image zoom 173 | - glightbox 174 | 175 | 176 | 177 | ### Advanced markdown 178 | 179 | 180 | 181 | markdown_extensions: 182 | 183 | ## Table of contents 184 | 185 | - toc: 186 | permalink: ⚓︎ 187 | permalink_title: Link to this specific section 188 | 189 | ## Admonitions 190 | - admonition 191 | - pymdownx.details 192 | - pymdownx.superfences 193 | 194 | ## Annotations and grids 195 | 196 | - attr_list 197 | - md_in_html 198 | 199 | ## Code blocks 200 | 201 | - pymdownx.highlight: 202 | anchor_linenums: true 203 | line_spans: __span 204 | pygments_lang_class: true 205 | - pymdownx.inlinehilite 206 | - pymdownx.snippets 207 | 208 | ## Content tabs 209 | 210 | - pymdownx.tabbed: 211 | slugify: !!python/object/apply:pymdownx.slugs.slugify 212 | kwds: 213 | case: lower 214 | 215 | ## Tables 216 | 217 | - tables 218 | 219 | ## Footnotes 220 | 221 | - footnotes 222 | 223 | ## Emojis 224 | 225 | - pymdownx.emoji: 226 | emoji_index: !!python/name:materialx.emoji.twemoji 227 | emoji_generator: !!python/name:materialx.emoji.to_svg 228 | 229 | ## Formatting 230 | 231 | - pymdownx.critic 232 | - pymdownx.caret 233 | - pymdownx.keys 234 | - pymdownx.mark 235 | - pymdownx.tilde 236 | 237 | ## Lists 238 | 239 | - def_list 240 | - pymdownx.tasklist: 241 | custom_checkbox: true 242 | 243 | ## Tooltips 244 | - abbr 245 | 246 | 247 | 248 | 249 | ### Random stuff 250 | extra: 251 | # Overriding the URL of the logo button 252 | #homepage: 253 | # Links to social networks 254 | #social: 255 | #- icon: 256 | #link: 257 | #name: 258 | # Page status 259 | status: 260 | new: New 261 | deprecated: Deprecated 262 | -------------------------------------------------------------------------------- /domains.go: -------------------------------------------------------------------------------- 1 | package countries 2 | 3 | import ( 4 | "encoding/json" 5 | "fmt" 6 | "strings" 7 | ) 8 | 9 | // DomainCode - domain code 10 | type DomainCode int64 // int64 for database/sql/driver.Valuer compatibility 11 | 12 | // Domain - capital info 13 | type Domain struct { 14 | Name string 15 | Code DomainCode 16 | Country CountryCode 17 | } 18 | 19 | // Type implements Typer interface 20 | func (_ DomainCode) Type() string { 21 | return TypeDomainCode 22 | } 23 | 24 | // String - implements fmt.Stringer, returns a domain (internet ccTDL) 25 | //nolint:gocyclo 26 | func (c DomainCode) String() string { //nolint:gocyclo 27 | switch c { 28 | case DomainArpa: 29 | return ".arpa" 30 | case DomainCom: 31 | return ".com" 32 | case DomainOrg: 33 | return ".org" 34 | case DomainNet: 35 | return ".net" 36 | case DomainEdu: 37 | return ".edu" 38 | case DomainGov: 39 | return ".gov" 40 | case DomainMil: 41 | return ".mil" 42 | case DomainTest: 43 | return ".test" 44 | case DomainBiz: 45 | return ".biz" 46 | case DomainInfo: 47 | return ".info" 48 | case DomainName: 49 | return ".name" 50 | case DomainBV, DomainSJ: 51 | return ".no" 52 | case DomainGB: 53 | return ".uk" 54 | case DomainXX: 55 | return "" 56 | } 57 | 58 | if c >= 999 { 59 | c = DomainCode(999) 60 | } 61 | 62 | a2 := CountryCode(c).Alpha2() 63 | if a2 == UnknownMsg { 64 | return UnknownMsg 65 | } 66 | 67 | return "." + strings.ToLower(a2) 68 | } 69 | 70 | // IsValid - returns true, if code is correct 71 | func (c DomainCode) IsValid() bool { 72 | return c.String() != UnknownMsg 73 | } 74 | 75 | // Country - returns a country of domain 76 | func (c DomainCode) Country() CountryCode { 77 | if !c.IsValid() { 78 | return Unknown 79 | } 80 | return CountryCode(c) 81 | } 82 | 83 | // Info - returns domain information as Domain 84 | func (c DomainCode) Info() *Domain { 85 | return &Domain{ 86 | Name: c.String(), 87 | Code: c, 88 | Country: c.Country(), 89 | } 90 | } 91 | 92 | // Type implements Typer interface 93 | func (_ Domain) Type() string { 94 | return TypeDomain 95 | } 96 | 97 | // Value implements database/sql/driver.Valuer 98 | func (c Domain) Value() (Value, error) { 99 | return json.Marshal(c) 100 | } 101 | 102 | // Scan implements database/sql.Scanner 103 | func (c *Domain) Scan(src interface{}) error { 104 | if c == nil { 105 | return fmt.Errorf("countries::Scan: Domain scan err: domain == nil") 106 | } 107 | switch src := src.(type) { 108 | case *Domain: 109 | *c = *src 110 | case Domain: 111 | *c = src 112 | default: 113 | return fmt.Errorf("countries::Scan: domain scan err: unexpected value of type %T for %T", src, *c) 114 | } 115 | return nil 116 | } 117 | 118 | // DomainCodeByName - return DomainCode by name, case-insensitive, example: domainAE := DomainCodeByName(".ae") OR capitalAE := domainAE("ae") 119 | func DomainCodeByName(name string) DomainCode { 120 | country := ByName(name) 121 | if country == Unknown { 122 | return DomainUnknown 123 | } 124 | return DomainCode(country) 125 | } 126 | 127 | // AllDomains - returns all domains codes 128 | func AllDomains() []DomainCode { 129 | return []DomainCode{ 130 | DomainArpa, 131 | DomainCom, 132 | DomainOrg, 133 | DomainNet, 134 | DomainEdu, 135 | DomainGov, 136 | DomainMil, 137 | DomainTest, 138 | DomainBiz, 139 | DomainInfo, 140 | DomainName, 141 | DomainAU, 142 | DomainAT, 143 | DomainAZ, 144 | DomainAL, 145 | DomainDZ, 146 | DomainAS, 147 | DomainAI, 148 | DomainAO, 149 | DomainAD, 150 | DomainAQ, 151 | DomainAG, 152 | DomainAN, 153 | DomainAE, 154 | DomainAR, 155 | DomainAM, 156 | DomainAW, 157 | DomainAF, 158 | DomainBS, 159 | DomainBD, 160 | DomainBB, 161 | DomainBH, 162 | DomainBY, 163 | DomainBZ, 164 | DomainBE, 165 | DomainBJ, 166 | DomainBM, 167 | DomainBG, 168 | DomainBO, 169 | DomainBA, 170 | DomainBW, 171 | DomainBR, 172 | DomainIO, 173 | DomainBN, 174 | DomainBF, 175 | DomainBI, 176 | DomainBT, 177 | DomainVU, 178 | DomainVA, 179 | DomainGB, 180 | DomainHU, 181 | DomainVE, 182 | DomainVG, 183 | DomainVI, 184 | DomainTL, 185 | DomainVN, 186 | DomainGA, 187 | DomainHT, 188 | DomainGY, 189 | DomainGM, 190 | DomainGH, 191 | DomainGP, 192 | DomainGT, 193 | DomainGN, 194 | DomainGW, 195 | DomainDE, 196 | DomainGI, 197 | DomainHN, 198 | DomainHK, 199 | DomainGD, 200 | DomainGL, 201 | DomainGR, 202 | DomainGE, 203 | DomainGU, 204 | DomainDK, 205 | DomainCD, 206 | DomainDJ, 207 | DomainDM, 208 | DomainDO, 209 | DomainEG, 210 | DomainZM, 211 | DomainEH, 212 | DomainZW, 213 | DomainIL, 214 | DomainIN, 215 | DomainID, 216 | DomainJO, 217 | DomainIQ, 218 | DomainIR, 219 | DomainIE, 220 | DomainIS, 221 | DomainES, 222 | DomainIT, 223 | DomainYE, 224 | DomainKZ, 225 | DomainKY, 226 | DomainKH, 227 | DomainCM, 228 | DomainCA, 229 | DomainQA, 230 | DomainKE, 231 | DomainCY, 232 | DomainKI, 233 | DomainCN, 234 | DomainCC, 235 | DomainCO, 236 | DomainKM, 237 | DomainCG, 238 | DomainKP, 239 | DomainKR, 240 | DomainCR, 241 | DomainCI, 242 | DomainCU, 243 | DomainKW, 244 | DomainKG, 245 | DomainLA, 246 | DomainLV, 247 | DomainLS, 248 | DomainLR, 249 | DomainLB, 250 | DomainLY, 251 | DomainLT, 252 | DomainLI, 253 | DomainLU, 254 | DomainMU, 255 | DomainMR, 256 | DomainMG, 257 | DomainYT, 258 | DomainMO, 259 | DomainMK, 260 | DomainMW, 261 | DomainMY, 262 | DomainML, 263 | DomainMV, 264 | DomainMT, 265 | DomainMP, 266 | DomainMA, 267 | DomainMQ, 268 | DomainMH, 269 | DomainMX, 270 | DomainFM, 271 | DomainMZ, 272 | DomainMD, 273 | DomainMC, 274 | DomainMN, 275 | DomainMS, 276 | DomainMM, 277 | DomainNA, 278 | DomainNR, 279 | DomainNP, 280 | DomainNE, 281 | DomainNG, 282 | DomainNL, 283 | DomainNI, 284 | DomainNU, 285 | DomainNZ, 286 | DomainNC, 287 | DomainNO, 288 | DomainOM, 289 | DomainBV, 290 | DomainIM, 291 | DomainNF, 292 | DomainPN, 293 | DomainCX, 294 | DomainSH, 295 | DomainWF, 296 | DomainHM, 297 | DomainCV, 298 | DomainCK, 299 | DomainWS, 300 | DomainSJ, 301 | DomainTC, 302 | DomainUM, 303 | DomainPK, 304 | DomainPW, 305 | DomainPS, 306 | DomainPA, 307 | DomainPG, 308 | DomainPY, 309 | DomainPE, 310 | DomainPL, 311 | DomainPT, 312 | DomainPR, 313 | DomainRE, 314 | DomainRU, 315 | DomainRW, 316 | DomainRO, 317 | DomainSV, 318 | DomainSM, 319 | DomainST, 320 | DomainSA, 321 | DomainSZ, 322 | DomainSC, 323 | DomainSN, 324 | DomainPM, 325 | DomainVC, 326 | DomainKN, 327 | DomainLC, 328 | DomainSG, 329 | DomainSY, 330 | DomainSK, 331 | DomainSI, 332 | DomainUS, 333 | DomainSB, 334 | DomainSO, 335 | DomainSD, 336 | DomainSR, 337 | DomainSL, 338 | DomainTJ, 339 | DomainTW, 340 | DomainTH, 341 | DomainTZ, 342 | DomainTG, 343 | DomainTK, 344 | DomainTO, 345 | DomainTT, 346 | DomainTV, 347 | DomainTN, 348 | DomainTM, 349 | DomainTR, 350 | DomainUG, 351 | DomainUZ, 352 | DomainUA, 353 | DomainUY, 354 | DomainFO, 355 | DomainFJ, 356 | DomainPH, 357 | DomainFI, 358 | DomainFK, 359 | DomainFR, 360 | DomainGF, 361 | DomainPF, 362 | DomainTF, 363 | DomainHR, 364 | DomainCF, 365 | DomainTD, 366 | DomainCZ, 367 | DomainCL, 368 | DomainCH, 369 | DomainSE, 370 | DomainXS, 371 | DomainLK, 372 | DomainEC, 373 | DomainGQ, 374 | DomainER, 375 | DomainEE, 376 | DomainET, 377 | DomainZA, 378 | DomainYU, 379 | DomainGS, 380 | DomainJM, 381 | DomainME, 382 | DomainBL, 383 | DomainSX, 384 | DomainRS, 385 | DomainAX, 386 | DomainBQ, 387 | DomainGG, 388 | DomainJE, 389 | DomainCW, 390 | DomainMF, 391 | DomainSS, 392 | DomainJP, 393 | } 394 | } 395 | 396 | // AllDomainsInfo - return all domains as []*Domain 397 | func AllDomainsInfo() []*Domain { 398 | all := AllDomains() 399 | domains := make([]*Domain, 0, len(all)) 400 | for _, v := range all { 401 | domains = append(domains, v.Info()) 402 | } 403 | return domains 404 | } 405 | 406 | // TotalDomains - returns number of domains in the package, countries.TotalDomains() == len(countries.AllDomains()) but static value for performance 407 | func TotalDomains() int { 408 | return 263 409 | } 410 | -------------------------------------------------------------------------------- /domainsconst.go: -------------------------------------------------------------------------------- 1 | package countries 2 | 3 | // TypeDomain for Typer interface 4 | const TypeDomain string = "countries.Domain" 5 | 6 | // TypeDomainCode for Typer interface 7 | const TypeDomainCode string = "countries.DomainCode" 8 | 9 | // Domains codes 10 | const ( 11 | DomainUnknown DomainCode = 0 12 | DomainArpa DomainCode = DomainCode(International) 13 | DomainCom DomainCode = DomainCode(International + 1) 14 | DomainOrg DomainCode = DomainCode(International + 2) 15 | DomainNet DomainCode = DomainCode(International + 3) 16 | DomainEdu DomainCode = DomainCode(International + 4) 17 | DomainGov DomainCode = DomainCode(International + 5) 18 | DomainMil DomainCode = DomainCode(International + 6) 19 | DomainTest DomainCode = DomainCode(International + 7) 20 | DomainBiz DomainCode = DomainCode(International + 8) 21 | DomainInfo DomainCode = DomainCode(International + 9) 22 | DomainName DomainCode = DomainCode(International + 10) 23 | DomainAU DomainCode = DomainCode(AU) 24 | DomainAT DomainCode = DomainCode(AT) 25 | DomainAZ DomainCode = DomainCode(AZ) 26 | DomainAL DomainCode = DomainCode(AL) 27 | DomainDZ DomainCode = DomainCode(DZ) 28 | DomainAS DomainCode = DomainCode(AS) 29 | DomainAI DomainCode = DomainCode(AI) 30 | DomainAO DomainCode = DomainCode(AO) 31 | DomainAD DomainCode = DomainCode(AD) 32 | DomainAQ DomainCode = DomainCode(AQ) 33 | DomainAG DomainCode = DomainCode(AG) 34 | DomainAN DomainCode = DomainCode(AN) 35 | DomainAE DomainCode = DomainCode(AE) 36 | DomainAR DomainCode = DomainCode(AR) 37 | DomainAM DomainCode = DomainCode(AM) 38 | DomainAW DomainCode = DomainCode(AW) 39 | DomainAF DomainCode = DomainCode(AF) 40 | DomainBS DomainCode = DomainCode(BS) 41 | DomainBD DomainCode = DomainCode(BD) 42 | DomainBB DomainCode = DomainCode(BB) 43 | DomainBH DomainCode = DomainCode(BH) 44 | DomainBY DomainCode = DomainCode(BY) 45 | DomainBZ DomainCode = DomainCode(BZ) 46 | DomainBE DomainCode = DomainCode(BE) 47 | DomainBJ DomainCode = DomainCode(BJ) 48 | DomainBM DomainCode = DomainCode(BM) 49 | DomainBG DomainCode = DomainCode(BG) 50 | DomainBO DomainCode = DomainCode(BO) 51 | DomainBA DomainCode = DomainCode(BA) 52 | DomainBW DomainCode = DomainCode(BW) 53 | DomainBR DomainCode = DomainCode(BR) 54 | DomainIO DomainCode = DomainCode(IO) 55 | DomainBN DomainCode = DomainCode(BN) 56 | DomainBF DomainCode = DomainCode(BF) 57 | DomainBI DomainCode = DomainCode(BI) 58 | DomainBT DomainCode = DomainCode(BT) 59 | DomainVU DomainCode = DomainCode(VU) 60 | DomainVA DomainCode = DomainCode(VA) 61 | DomainGB DomainCode = DomainCode(GB) 62 | DomainHU DomainCode = DomainCode(HU) 63 | DomainVE DomainCode = DomainCode(VE) 64 | DomainVG DomainCode = DomainCode(VG) 65 | DomainVI DomainCode = DomainCode(VI) 66 | DomainTL DomainCode = DomainCode(TL) 67 | DomainVN DomainCode = DomainCode(VN) 68 | DomainGA DomainCode = DomainCode(GA) 69 | DomainHT DomainCode = DomainCode(HT) 70 | DomainGY DomainCode = DomainCode(GY) 71 | DomainGM DomainCode = DomainCode(GM) 72 | DomainGH DomainCode = DomainCode(GH) 73 | DomainGP DomainCode = DomainCode(GP) 74 | DomainGT DomainCode = DomainCode(GT) 75 | DomainGN DomainCode = DomainCode(GN) 76 | DomainGW DomainCode = DomainCode(GW) 77 | DomainDE DomainCode = DomainCode(DE) 78 | DomainGI DomainCode = DomainCode(GI) 79 | DomainHN DomainCode = DomainCode(HN) 80 | DomainHK DomainCode = DomainCode(HK) 81 | DomainGD DomainCode = DomainCode(GD) 82 | DomainGL DomainCode = DomainCode(GL) 83 | DomainGR DomainCode = DomainCode(GR) 84 | DomainGE DomainCode = DomainCode(GE) 85 | DomainGU DomainCode = DomainCode(GU) 86 | DomainDK DomainCode = DomainCode(DK) 87 | DomainCD DomainCode = DomainCode(CD) 88 | DomainDJ DomainCode = DomainCode(DJ) 89 | DomainDM DomainCode = DomainCode(DM) 90 | DomainDO DomainCode = DomainCode(DO) 91 | DomainEG DomainCode = DomainCode(EG) 92 | DomainZM DomainCode = DomainCode(ZM) 93 | DomainEH DomainCode = DomainCode(EH) 94 | DomainZW DomainCode = DomainCode(ZW) 95 | DomainIL DomainCode = DomainCode(IL) 96 | DomainIN DomainCode = DomainCode(IN) 97 | DomainID DomainCode = DomainCode(ID) 98 | DomainJO DomainCode = DomainCode(JO) 99 | DomainIQ DomainCode = DomainCode(IQ) 100 | DomainIR DomainCode = DomainCode(IR) 101 | DomainIE DomainCode = DomainCode(IE) 102 | DomainIS DomainCode = DomainCode(IS) 103 | DomainES DomainCode = DomainCode(ES) 104 | DomainIT DomainCode = DomainCode(IT) 105 | DomainYE DomainCode = DomainCode(YE) 106 | DomainKZ DomainCode = DomainCode(KZ) 107 | DomainKY DomainCode = DomainCode(KY) 108 | DomainKH DomainCode = DomainCode(KH) 109 | DomainCM DomainCode = DomainCode(CM) 110 | DomainCA DomainCode = DomainCode(CA) 111 | DomainQA DomainCode = DomainCode(QA) 112 | DomainKE DomainCode = DomainCode(KE) 113 | DomainCY DomainCode = DomainCode(CY) 114 | DomainKI DomainCode = DomainCode(KI) 115 | DomainCN DomainCode = DomainCode(CN) 116 | DomainCC DomainCode = DomainCode(CC) 117 | DomainCO DomainCode = DomainCode(CO) 118 | DomainKM DomainCode = DomainCode(KM) 119 | DomainCG DomainCode = DomainCode(CG) 120 | DomainKP DomainCode = DomainCode(KP) 121 | DomainKR DomainCode = DomainCode(KR) 122 | DomainCR DomainCode = DomainCode(CR) 123 | DomainCI DomainCode = DomainCode(CI) 124 | DomainCU DomainCode = DomainCode(CU) 125 | DomainKW DomainCode = DomainCode(KW) 126 | DomainKG DomainCode = DomainCode(KG) 127 | DomainLA DomainCode = DomainCode(LA) 128 | DomainLV DomainCode = DomainCode(LV) 129 | DomainLS DomainCode = DomainCode(LS) 130 | DomainLR DomainCode = DomainCode(LR) 131 | DomainLB DomainCode = DomainCode(LB) 132 | DomainLY DomainCode = DomainCode(LY) 133 | DomainLT DomainCode = DomainCode(LT) 134 | DomainLI DomainCode = DomainCode(LI) 135 | DomainLU DomainCode = DomainCode(LU) 136 | DomainMU DomainCode = DomainCode(MU) 137 | DomainMR DomainCode = DomainCode(MR) 138 | DomainMG DomainCode = DomainCode(MG) 139 | DomainYT DomainCode = DomainCode(YT) 140 | DomainMO DomainCode = DomainCode(MO) 141 | DomainMK DomainCode = DomainCode(MK) 142 | DomainMW DomainCode = DomainCode(MW) 143 | DomainMY DomainCode = DomainCode(MY) 144 | DomainML DomainCode = DomainCode(ML) 145 | DomainMV DomainCode = DomainCode(MV) 146 | DomainMT DomainCode = DomainCode(MT) 147 | DomainMP DomainCode = DomainCode(MP) 148 | DomainMA DomainCode = DomainCode(MA) 149 | DomainMQ DomainCode = DomainCode(MQ) 150 | DomainMH DomainCode = DomainCode(MH) 151 | DomainMX DomainCode = DomainCode(MX) 152 | DomainFM DomainCode = DomainCode(FM) 153 | DomainMZ DomainCode = DomainCode(MZ) 154 | DomainMD DomainCode = DomainCode(MD) 155 | DomainMC DomainCode = DomainCode(MC) 156 | DomainMN DomainCode = DomainCode(MN) 157 | DomainMS DomainCode = DomainCode(MS) 158 | DomainMM DomainCode = DomainCode(MM) 159 | DomainNA DomainCode = DomainCode(NA) 160 | DomainNR DomainCode = DomainCode(NR) 161 | DomainNP DomainCode = DomainCode(NP) 162 | DomainNE DomainCode = DomainCode(NE) 163 | DomainNG DomainCode = DomainCode(NG) 164 | DomainNL DomainCode = DomainCode(NL) 165 | DomainNI DomainCode = DomainCode(NI) 166 | DomainNU DomainCode = DomainCode(NU) 167 | DomainNZ DomainCode = DomainCode(NZ) 168 | DomainNC DomainCode = DomainCode(NC) 169 | DomainNO DomainCode = DomainCode(NO) 170 | DomainOM DomainCode = DomainCode(OM) 171 | DomainBV DomainCode = DomainCode(BV) 172 | DomainIM DomainCode = DomainCode(IM) 173 | DomainNF DomainCode = DomainCode(NF) 174 | DomainPN DomainCode = DomainCode(PN) 175 | DomainCX DomainCode = DomainCode(CX) 176 | DomainSH DomainCode = DomainCode(SH) 177 | DomainWF DomainCode = DomainCode(WF) 178 | DomainHM DomainCode = DomainCode(HM) 179 | DomainCV DomainCode = DomainCode(CV) 180 | DomainCK DomainCode = DomainCode(CK) 181 | DomainWS DomainCode = DomainCode(WS) 182 | DomainSJ DomainCode = DomainCode(SJ) 183 | DomainTC DomainCode = DomainCode(TC) 184 | DomainUM DomainCode = DomainCode(UM) 185 | DomainPK DomainCode = DomainCode(PK) 186 | DomainPW DomainCode = DomainCode(PW) 187 | DomainPS DomainCode = DomainCode(PS) 188 | DomainPA DomainCode = DomainCode(PA) 189 | DomainPG DomainCode = DomainCode(PG) 190 | DomainPY DomainCode = DomainCode(PY) 191 | DomainPE DomainCode = DomainCode(PE) 192 | DomainPL DomainCode = DomainCode(PL) 193 | DomainPT DomainCode = DomainCode(PT) 194 | DomainPR DomainCode = DomainCode(PR) 195 | DomainRE DomainCode = DomainCode(RE) 196 | DomainRU DomainCode = DomainCode(RU) 197 | DomainRW DomainCode = DomainCode(RW) 198 | DomainRO DomainCode = DomainCode(RO) 199 | DomainSV DomainCode = DomainCode(SV) 200 | DomainSM DomainCode = DomainCode(SM) 201 | DomainST DomainCode = DomainCode(ST) 202 | DomainSA DomainCode = DomainCode(SA) 203 | DomainSZ DomainCode = DomainCode(SZ) 204 | DomainSC DomainCode = DomainCode(SC) 205 | DomainSN DomainCode = DomainCode(SN) 206 | DomainPM DomainCode = DomainCode(PM) 207 | DomainVC DomainCode = DomainCode(VC) 208 | DomainKN DomainCode = DomainCode(KN) 209 | DomainLC DomainCode = DomainCode(LC) 210 | DomainSG DomainCode = DomainCode(SG) 211 | DomainSY DomainCode = DomainCode(SY) 212 | DomainSK DomainCode = DomainCode(SK) 213 | DomainSI DomainCode = DomainCode(SI) 214 | DomainUS DomainCode = DomainCode(US) 215 | DomainSB DomainCode = DomainCode(SB) 216 | DomainSO DomainCode = DomainCode(SO) 217 | DomainSD DomainCode = DomainCode(SD) 218 | DomainSR DomainCode = DomainCode(SR) 219 | DomainSL DomainCode = DomainCode(SL) 220 | DomainTJ DomainCode = DomainCode(TJ) 221 | DomainTW DomainCode = DomainCode(TW) 222 | DomainTH DomainCode = DomainCode(TH) 223 | DomainTZ DomainCode = DomainCode(TZ) 224 | DomainTG DomainCode = DomainCode(TG) 225 | DomainTK DomainCode = DomainCode(TK) 226 | DomainTO DomainCode = DomainCode(TO) 227 | DomainTT DomainCode = DomainCode(TT) 228 | DomainTV DomainCode = DomainCode(TV) 229 | DomainTN DomainCode = DomainCode(TN) 230 | DomainTM DomainCode = DomainCode(TM) 231 | DomainTR DomainCode = DomainCode(TR) 232 | DomainUG DomainCode = DomainCode(UG) 233 | DomainUZ DomainCode = DomainCode(UZ) 234 | DomainUA DomainCode = DomainCode(UA) 235 | DomainUY DomainCode = DomainCode(UY) 236 | DomainFO DomainCode = DomainCode(FO) 237 | DomainFJ DomainCode = DomainCode(FJ) 238 | DomainPH DomainCode = DomainCode(PH) 239 | DomainFI DomainCode = DomainCode(FI) 240 | DomainFK DomainCode = DomainCode(FK) 241 | DomainFR DomainCode = DomainCode(FR) 242 | DomainGF DomainCode = DomainCode(GF) 243 | DomainPF DomainCode = DomainCode(PF) 244 | DomainTF DomainCode = DomainCode(TF) 245 | DomainHR DomainCode = DomainCode(HR) 246 | DomainCF DomainCode = DomainCode(CF) 247 | DomainTD DomainCode = DomainCode(TD) 248 | DomainCZ DomainCode = DomainCode(CZ) 249 | DomainCL DomainCode = DomainCode(CL) 250 | DomainCH DomainCode = DomainCode(CH) 251 | DomainSE DomainCode = DomainCode(SE) 252 | DomainXS DomainCode = DomainCode(XS) 253 | DomainLK DomainCode = DomainCode(LK) 254 | DomainEC DomainCode = DomainCode(EC) 255 | DomainGQ DomainCode = DomainCode(GQ) 256 | DomainER DomainCode = DomainCode(ER) 257 | DomainEE DomainCode = DomainCode(EE) 258 | DomainET DomainCode = DomainCode(ET) 259 | DomainZA DomainCode = DomainCode(ZA) 260 | DomainYU DomainCode = DomainCode(YU) 261 | DomainGS DomainCode = DomainCode(GS) 262 | DomainJM DomainCode = DomainCode(JM) 263 | DomainME DomainCode = DomainCode(ME) 264 | DomainBL DomainCode = DomainCode(BL) 265 | DomainSX DomainCode = DomainCode(SX) 266 | DomainRS DomainCode = DomainCode(RS) 267 | DomainAX DomainCode = DomainCode(AX) 268 | DomainBQ DomainCode = DomainCode(BQ) 269 | DomainGG DomainCode = DomainCode(GG) 270 | DomainJE DomainCode = DomainCode(JE) 271 | DomainCW DomainCode = DomainCode(CW) 272 | DomainMF DomainCode = DomainCode(MF) 273 | DomainSS DomainCode = DomainCode(SS) 274 | DomainJP DomainCode = DomainCode(JP) 275 | DomainXX DomainCode = DomainCode(XX) 276 | ) 277 | -------------------------------------------------------------------------------- /example/countries_example.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | "fmt" 5 | "strings" 6 | 7 | "github.com/biter777/countries" 8 | // "github.com/jinzhu/gorm" 9 | ) 10 | 11 | func main() { 12 | countryJapan := countries.Japan 13 | fmt.Printf("Country name in english: %v\n", countryJapan) // Japan 14 | fmt.Printf("Country name in russian: %v\n", countryJapan.StringRus()) // Япония 15 | fmt.Printf("Country ISO-3166 digit code: %d\n", countryJapan) // 392 16 | fmt.Printf("Country ISO-3166 Alpha-2 code: %v\n", countryJapan.Alpha2()) // JP 17 | fmt.Printf("Country ISO-3166 Alpha-3 code: %v\n", countryJapan.Alpha3()) // JPN 18 | fmt.Printf("Country IOC/NOC code: %v\n", countryJapan.IOC()) // JPN 19 | fmt.Printf("Country FIFA code: %v\n", countryJapan.FIFA()) // JPN 20 | fmt.Printf("Country Capital: %v\n", countryJapan.Capital()) // Tokyo 21 | fmt.Printf("Country ITU-T E.164 call code: %v\n", countryJapan.CallCodes()) // +81 22 | fmt.Printf("Country ccTLD domain: %v\n", countryJapan.Domain()) // .jp 23 | fmt.Printf("Country UN M.49 region name: %v\n", countryJapan.Region()) // Asia 24 | fmt.Printf("Country UN M.49 region code: %d\n", countryJapan.Region()) // 142 25 | fmt.Printf("Country emoji/flag: %v\n\n", countryJapan.Emoji()) // 🇯🇵 26 | 27 | currencyJapan := countryJapan.Currency() 28 | fmt.Printf("Country ISO-4217 Currency name in english: %v\n", currencyJapan) // Yen 29 | fmt.Printf("Country ISO-4217 Currency digit code: %d\n", currencyJapan) // 392 30 | fmt.Printf("Country ISO-4217 Currency Alpha code: %v\n", currencyJapan.Alpha()) // JPY 31 | fmt.Printf("Country Currency emoji: %v\n", currencyJapan.Emoji()) // 💴 32 | fmt.Printf("Country of Currency %v: %v\n\n", currencyJapan, currencyJapan.Countries()) // Japan 33 | 34 | // OR you can alternative use: 35 | japanInfo := countries.Japan.Info() 36 | fmt.Printf("Country name in english: %v\n", japanInfo.Name) // Japan 37 | fmt.Printf("Country ISO-3166 digit code: %d\n", japanInfo.Code) // 392 38 | fmt.Printf("Country ISO-3166 Alpha-2 code: %v\n", japanInfo.Alpha2) // JP 39 | fmt.Printf("Country ISO-3166 Alpha-3 code: %v\n", japanInfo.Alpha3) // JPN 40 | fmt.Printf("Country IOC/NOC code: %v\n", japanInfo.IOC) // JPN 41 | fmt.Printf("Country FIFA code: %v\n", japanInfo.FIFA) // JPN 42 | fmt.Printf("Country Capital: %v\n", japanInfo.Capital) // Tokyo 43 | fmt.Printf("Country ITU-T E.164 call code: %v\n", japanInfo.CallCodes) // +81 44 | fmt.Printf("Country ccTLD domain: %v\n", japanInfo.Domain) // .jp 45 | fmt.Printf("Country UN M.49 region name: %v\n", japanInfo.Region) // Asia 46 | fmt.Printf("Country UN M.49 region code: %d\n", japanInfo.Region) // 142 47 | fmt.Printf("Country emoji/flag: %v\n", japanInfo.Emoji) // 🇯🇵 48 | fmt.Printf("Country ISO-4217 Currency name in english: %v\n", japanInfo.Currency) // Yen 49 | fmt.Printf("Country ISO-4217 Currency digit code: %d\n", japanInfo.Currency) // 392 50 | fmt.Printf("Country ISO-4217 Currency Alpha code: %v\n", japanInfo.Currency.Alpha()) // JPY 51 | 52 | // Detection usage 53 | // Detect by name 54 | angola := countries.ByName("angola") 55 | fmt.Printf("Country name in english: %v\n", angola) // Angola 56 | fmt.Printf("Country ISO-3166 digit code: %d\n", angola) // 24 57 | fmt.Printf("Country ISO-3166 Alpha-2 code: %v\n", angola.Alpha2()) // AO 58 | fmt.Printf("Country ISO-3166 Alpha-3 code: %v\n", angola.Alpha3()) // AGO 59 | // Detect by code/numeric 60 | country := countries.ByNumeric(40) 61 | fmt.Printf("Country name in english: %v\n", country) // Austria 62 | fmt.Printf("Country ISO-3166 digit code: %d\n", country) // 40 63 | fmt.Printf("Country ISO-3166 Alpha-2 code: %v\n", country.Alpha2()) // AT 64 | fmt.Printf("Country ISO-3166 Alpha-3 code: %v\n", country.Alpha3()) // AUT 65 | 66 | // Comparing usage 67 | // Compare by code/numeric 68 | if countries.ByName("angola") == countries.AGO { 69 | fmt.Println("Yes! It's Angola!") // Yes! It's Angola! 70 | } 71 | // Compare by name 72 | if strings.EqualFold("angola", countries.AGO.String()) { 73 | fmt.Println("Yes! It's Angola!") // Yes! It's Angola! 74 | } 75 | 76 | if countries.ByName("Saint Martin") == countries.MAF { 77 | fmt.Println("Yes! It's Saint Martin!") // Yes! It's Saint Martin! 78 | } 79 | 80 | if countries.ByName("Iran, Islamic Republic Of") == countries.IRN { 81 | fmt.Println("Yes! It's Iran!") // Yes! It's Iran! 82 | } 83 | // Database usage 84 | /* 85 | type User struct { 86 | gorm.Model 87 | Name string 88 | Country countries.CountryCode 89 | Currency countries.CurrencyCode 90 | } 91 | user := &User{Name: "Helen", Country: countries.Slovenia, Currency: countries.CurrencyEUR} 92 | db, err := gorm.Open("postgres", 500, "host=127.0.0.2 port=5432 user=usr password=1234567 dbname=db") 93 | if err != nil { 94 | panic(err) 95 | } 96 | defer db.Close() 97 | db.Create(user) 98 | */ 99 | } 100 | -------------------------------------------------------------------------------- /go.mod: -------------------------------------------------------------------------------- 1 | module github.com/biter777/countries 2 | 3 | go 1.13 4 | -------------------------------------------------------------------------------- /go.sum: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /regions.go: -------------------------------------------------------------------------------- 1 | package countries 2 | 3 | import ( 4 | "encoding/json" 5 | "fmt" 6 | ) 7 | 8 | // RegionCode - Region code (UN M.49 code standart) 9 | type RegionCode int64 // int64 for database/sql/driver.Valuer compatibility 10 | 11 | // Region - all info about region 12 | type Region struct { 13 | Name string 14 | Code RegionCode 15 | } 16 | 17 | // Type implements Typer interface 18 | func (_ RegionCode) Type() string { 19 | return TypeRegionCode 20 | } 21 | 22 | // String - implements fmt.Stringer, returns a Region name in english 23 | func (c RegionCode) String() string { 24 | switch c { 25 | case RegionNone: 26 | return "None" 27 | case RegionAF: 28 | return "Africa" 29 | case RegionNA: 30 | return "North America" 31 | case RegionOC: 32 | return "Oceania" 33 | case RegionAN: 34 | return "Antarctica" 35 | case RegionAS: 36 | return "Asia" 37 | case RegionEU: 38 | return "Europe" 39 | case RegionSA: 40 | return "South America" 41 | } 42 | return UnknownMsg 43 | } 44 | 45 | // StringRus - returns a Region name in russian 46 | func (c RegionCode) StringRus() string { 47 | switch c { 48 | case RegionNone: 49 | return "Отсутствует" 50 | case RegionAF: 51 | return "Африка" 52 | case RegionNA: 53 | return "Северная Америка" 54 | case RegionOC: 55 | return "Океания" 56 | case RegionAN: 57 | return "Антарктика" 58 | case RegionAS: 59 | return "Азия" 60 | case RegionEU: 61 | return "Европа" 62 | case RegionSA: 63 | return "Южная Америка" 64 | } 65 | return UnknownMsg 66 | } 67 | 68 | // IsValid - returns true, if code is correct 69 | func (c RegionCode) IsValid() bool { 70 | return c.String() != UnknownMsg 71 | } 72 | 73 | // TotalRegions - returns number of Regions codes in the package 74 | func TotalRegions() int { 75 | return 7 76 | } 77 | 78 | // Info - return a RegionCode as Region info 79 | func (c RegionCode) Info() *Region { 80 | return &Region{ 81 | Name: c.String(), 82 | Code: c, 83 | } 84 | } 85 | 86 | // Type implements Typer interface 87 | func (_ *Region) Type() string { 88 | return TypeRegion 89 | } 90 | 91 | // Value implements database/sql/driver.Valuer 92 | func (r Region) Value() (Value, error) { 93 | return json.Marshal(r) 94 | } 95 | 96 | // Scan implements database/sql.Scanner 97 | func (r *Region) Scan(src interface{}) error { 98 | if r == nil { 99 | return fmt.Errorf("countries::Scan: Region scan err: region == nil") 100 | } 101 | switch src := src.(type) { 102 | case *Region: 103 | *r = *src 104 | case Region: 105 | *r = src 106 | default: 107 | return fmt.Errorf("countries::Scan: Region scan err: unexpected value of type %T for %T", src, *r) 108 | } 109 | return nil 110 | } 111 | 112 | // AllRegions - returns all regions codes 113 | func AllRegions() []RegionCode { 114 | return []RegionCode{ 115 | RegionAF, 116 | RegionNA, 117 | RegionOC, 118 | RegionAN, 119 | RegionAS, 120 | RegionEU, 121 | RegionSA, 122 | } 123 | } 124 | 125 | // AllRegionsInfo - return all regions as []*Region 126 | func AllRegionsInfo() []*Region { 127 | all := AllRegions() 128 | regions := make([]*Region, 0, len(all)) 129 | for _, v := range all { 130 | regions = append(regions, v.Info()) 131 | } 132 | return regions 133 | } 134 | 135 | // RegionCodeByName - return RegionCode by region name, case-insensitive, example: regionEU := RegionCodeByName("eu") OR regionEU := RegionCodeByName("europe") 136 | func RegionCodeByName(name string) RegionCode { 137 | switch textPrepare(name) { 138 | case "AF", "AFRICA", "AFRIKA": 139 | return RegionAF 140 | case "NA", "NORTHAMERICA", "NORTHAMERIC": 141 | return RegionNA 142 | case "SA", "SOUTHAMERICA", "SOUTHAMERIC": 143 | return RegionSA 144 | case "OC", "OCEANIA", "OKEANIA", "OCEANIYA", "OKEANIYA": 145 | return RegionOC 146 | case "AN", "ANTARCTICA", "ANTARCTIC", "ANTARKTICA", "ANTARKTIC": 147 | return RegionAN 148 | case "AS", "ASIA": 149 | return RegionAS 150 | case "EU", "EUROPE", "EUROPA", "EVROPA": 151 | return RegionEU 152 | case "NONE", "XX", "NON": 153 | return RegionNone 154 | } 155 | return RegionUnknown 156 | } 157 | -------------------------------------------------------------------------------- /regionsconst.go: -------------------------------------------------------------------------------- 1 | package countries 2 | 3 | // TypeRegionCode for Typer interface 4 | const TypeRegionCode string = "countries.RegionCode" 5 | 6 | // TypeRegion for Typer interface 7 | const TypeRegion string = "countries.Region" 8 | 9 | const ( 10 | // RegionUnknown - RegionUnknown 11 | RegionUnknown RegionCode = 0 12 | // RegionAF - RegionAF 13 | RegionAF RegionCode = 2 14 | // RegionNA - RegionNA 15 | RegionNA RegionCode = 3 16 | // RegionSA - RegionSA 17 | RegionSA RegionCode = 5 18 | // RegionOC - RegionOC 19 | RegionOC RegionCode = 9 20 | // RegionAN - RegionAN 21 | RegionAN RegionCode = 10 22 | // RegionAS - RegionAS 23 | RegionAS RegionCode = 142 24 | // RegionEU - RegionEU 25 | RegionEU RegionCode = 150 26 | // RegionNone - RegionNone 27 | RegionNone RegionCode = RegionCode(None) 28 | ) 29 | 30 | const ( 31 | // RegionAfrica RegionCode = 2 32 | RegionAfrica RegionCode = 2 33 | // RegionNorthAmerica RegionCode = 3 34 | RegionNorthAmerica RegionCode = 3 35 | // RegionSouthAmerica RegionCode = 5 36 | RegionSouthAmerica RegionCode = 5 37 | // RegionOceania RegionCode = 9 38 | RegionOceania RegionCode = 9 39 | // RegionAntarctica RegionCode = 10 40 | RegionAntarctica RegionCode = 999 41 | // RegionAsia RegionCode = 142 42 | RegionAsia RegionCode = 142 43 | // RegionEurope RegionCode = 150 44 | RegionEurope RegionCode = 150 45 | ) 46 | -------------------------------------------------------------------------------- /subdivisions_test.go: -------------------------------------------------------------------------------- 1 | package countries 2 | 3 | import ( 4 | "encoding/json" 5 | "testing" 6 | ) 7 | 8 | // Test Subdivisions 9 | 10 | //nolint:gocyclo 11 | func TestSubdivisionsCount(t *testing.T) { 12 | got := TotalSubdivisions() 13 | 14 | want := len(AllSubdivisions()) 15 | if got != want { 16 | t.Errorf("Test AllSubdivisions() err, want %v, got %v", want, got) 17 | } 18 | 19 | want = len(AllSubdivisionsInfo()) 20 | if got != want { 21 | t.Errorf("Test AllSubdivisionsInfo() err, want %v, got %v", want, got) 22 | } 23 | } 24 | 25 | //nolint:gocyclo 26 | func TestSubdivisionsCode(t *testing.T) { 27 | for _, s := range AllSubdivisions() { 28 | if s == SubdivisionUnknown { 29 | continue 30 | } 31 | 32 | if info := s.Info(); info.Country == Unknown { 33 | t.Errorf("Test info.Country err, s: %v", *info) 34 | } 35 | } 36 | } 37 | 38 | //nolint:gocyclo 39 | func TestSubdivisionsIsValid(t *testing.T) { 40 | for _, s := range AllSubdivisions() { 41 | if s == SubdivisionUnknown { 42 | continue 43 | } 44 | 45 | if !s.IsValid() && s != SubdivisionUnknown { 46 | t.Errorf("Test SubdivisionCode.IsValid() err") 47 | } 48 | } 49 | } 50 | 51 | //nolint:gocyclo 52 | func TestSubdivisionsString(t *testing.T) { 53 | for _, s := range AllSubdivisions() { 54 | if s == SubdivisionUnknown { 55 | continue 56 | } 57 | if s.String() == "" || s.String() == UnknownMsg { 58 | t.Errorf("Test SubdivisionCode.String() err, s: %v", s) 59 | } 60 | } 61 | } 62 | 63 | //nolint:gocyclo 64 | func TestSubdivisionsType(t *testing.T) { 65 | for _, s := range AllSubdivisions() { 66 | if s.Type() != TypeSubdivisionCode { 67 | t.Errorf("Test SubdivisionCode.String() err, s: %v", s) 68 | } 69 | } 70 | } 71 | 72 | //nolint:gocyclo 73 | func TestSubdivisionsCountry(t *testing.T) { //nolint:gocyclo 74 | for _, s := range AllSubdivisions() { 75 | if s == SubdivisionUnknown { 76 | continue 77 | } 78 | 79 | if s.Country() == Unknown { 80 | t.Errorf("Test SubdivisionCountry.String() err, s: %v", s) 81 | } 82 | } 83 | } 84 | 85 | //nolint:gocyclo 86 | func TestSubdivisionsInfo(t *testing.T) { 87 | for _, s := range AllSubdivisions() { 88 | if s == SubdivisionUnknown { 89 | continue 90 | } 91 | 92 | if got := s.Info().Code; got != s { 93 | t.Errorf("Test AllSubdivisions() err, want %v, got %v", s, got) 94 | } 95 | } 96 | 97 | for _, c := range getAllCountries(t) { 98 | for _, s := range c.Subdivisions() { 99 | if got := s.Info().Code; got != s { 100 | t.Errorf("Test c.Subdivision[*].Info() err, want %v, got %v for c: %v", s, got, c) 101 | } 102 | } 103 | } 104 | } 105 | 106 | //nolint:gocyclo 107 | func TestSubdivisionsInfoValue(t *testing.T) { 108 | for _, s := range AllSubdivisionsInfo() { 109 | if _, err := s.Value(); err != nil { 110 | t.Errorf("Test SubdivisionCode.String() Value err, s: %v", s) 111 | } 112 | 113 | if _, err := json.Marshal(s); err != nil { 114 | t.Errorf("Test SubdivisionCode.String() Marshal err, s: %v", s) 115 | } 116 | } 117 | } 118 | 119 | //nolint:gocyclo 120 | func TestSubdivisionsInfoType(t *testing.T) { 121 | for _, s := range AllSubdivisionsInfo() { 122 | if out := s.Type(); out != TypeSubdivision { 123 | t.Errorf("Test AllSubdivisionsInfo.Type() err, want %v, got %v", TypeCallCodeInfo, out) 124 | } 125 | } 126 | } 127 | 128 | //nolint:gocyclo 129 | func TestSubdivisionsInfoScan(t *testing.T) { 130 | for _, s := range AllSubdivisionsInfo() { 131 | err := s.Scan(s) 132 | if err != nil { 133 | t.Errorf("Test AllSubdivisionsInfo.Scan() err") 134 | } 135 | 136 | s2 := *s 137 | err = s.Scan(s2) 138 | if err != nil { 139 | t.Errorf("Test AllSubdivisionsInfo.Scan() err") 140 | } 141 | 142 | if s.Name != s2.Name || s.Code != s2.Code || s.Country != s2.Country { 143 | t.Errorf("Test AllSubdivisionsInfo.Scan() err") 144 | } 145 | 146 | err = s.Scan(nil) 147 | if err == nil { 148 | t.Errorf("Test AllSubdivisionsInfo.Scan() err") 149 | } 150 | 151 | s = nil 152 | err = s.Scan(s) 153 | if err == nil { 154 | t.Errorf("Test AllSubdivisionsInfo.Scan() err") 155 | } 156 | } 157 | } 158 | 159 | //nolint:gocyclo 160 | func TestSubdivisionSubdivisionType(t *testing.T) { //nolint:gocyclo 161 | for _, s := range AllSubdivisions() { 162 | if s == SubdivisionUnknown { 163 | continue 164 | } 165 | 166 | if s.SubdivisionType() == SubdivisionTypeUnknown { 167 | t.Errorf("Test SubdivisionType.String() err, s: %v", s) 168 | } 169 | } 170 | } 171 | 172 | //nolint:gocyclo 173 | func TestSubdivisionsByCountryCode(t *testing.T) { 174 | got := SubdivisionsByCountryCode(ByName("AU")) 175 | 176 | if count := len(got); count != 8 { 177 | t.Errorf("Australia has 8 subdivisions but got %d", count) 178 | } 179 | } 180 | -------------------------------------------------------------------------------- /subdivisionstypeconst.go: -------------------------------------------------------------------------------- 1 | // Package countries supports subdivisions as per ISO 3166-2. 2 | // 3 | // Data has been sourced from . See 4 | // license for further information. 5 | package countries 6 | 7 | // TypeSubdivisionTypeCode for Typer interface. 8 | const TypeSubdivisionTypeCode string = "countries.SubdivisionTypeCode" 9 | 10 | // TypeSubdivisionType for Typer interface. 11 | const TypeSubdivisionType string = "countries.SubdivisionType" 12 | 13 | // Subdivision types 14 | const ( 15 | // SubdivisionTypeUnknown SubdivisionType = "Unknown" 16 | SubdivisionTypeUnknown = "unknown" 17 | // SubdivisionTypeAdministration SubdivisionTypeCode = "Administration" 18 | SubdivisionTypeAdministration SubdivisionTypeCode = "Administration" 19 | // SubdivisionTypeAdministrativeAtoll SubdivisionTypeCode = "Administrative Atoll" 20 | SubdivisionTypeAdministrativeAtoll SubdivisionTypeCode = "Administrative Atoll" 21 | // SubdivisionTypeAdministrativeRegion SubdivisionTypeCode = "Administrative Region" 22 | SubdivisionTypeAdministrativeRegion SubdivisionTypeCode = "Administrative Region" 23 | // SubdivisionTypeAdministrativeTerritory SubdivisionTypeCode = "Administrative Territory" 24 | SubdivisionTypeAdministrativeTerritory SubdivisionTypeCode = "Administrative Territory" 25 | // SubdivisionTypeArcticRegion SubdivisionTypeCode = "Arctic Region" 26 | SubdivisionTypeArcticRegion SubdivisionTypeCode = "Arctic Region" 27 | // SubdivisionTypeArea SubdivisionTypeCode = "Area" 28 | SubdivisionTypeArea SubdivisionTypeCode = "Area" 29 | // SubdivisionTypeAutonomousCity SubdivisionTypeCode = "Autonomous City" 30 | SubdivisionTypeAutonomousCity SubdivisionTypeCode = "Autonomous City" 31 | // SubdivisionTypeAutonomousCommunity SubdivisionTypeCode = "Autonomous Community" 32 | SubdivisionTypeAutonomousCommunity SubdivisionTypeCode = "Autonomous Community" 33 | // SubdivisionTypeAutonomousDistrict SubdivisionTypeCode = "Autonomous District" 34 | SubdivisionTypeAutonomousDistrict SubdivisionTypeCode = "Autonomous District" 35 | // SubdivisionTypeAutonomousMunicipality SubdivisionTypeCode = "Autonomous Municipality" 36 | SubdivisionTypeAutonomousMunicipality SubdivisionTypeCode = "Autonomous Municipality" 37 | // SubdivisionTypeAutonomousProvince SubdivisionTypeCode = "Autonomous Province" 38 | SubdivisionTypeAutonomousProvince SubdivisionTypeCode = "Autonomous Province" 39 | // SubdivisionTypeAutonomousRegion SubdivisionTypeCode = "Autonomous Region" 40 | SubdivisionTypeAutonomousRegion SubdivisionTypeCode = "Autonomous Region" 41 | // SubdivisionTypeAutonomousRepublic SubdivisionTypeCode = "Autonomous Republic" 42 | SubdivisionTypeAutonomousRepublic SubdivisionTypeCode = "Autonomous Republic" 43 | // SubdivisionTypeAutonomousSector SubdivisionTypeCode = "Autonomous Sector" 44 | SubdivisionTypeAutonomousSector SubdivisionTypeCode = "Autonomous Sector" 45 | // SubdivisionTypeAutonomousTerritorialUnit SubdivisionTypeCode = "Autonomous Territorial Unit" 46 | SubdivisionTypeAutonomousTerritorialUnit SubdivisionTypeCode = "Autonomous Territorial Unit" 47 | // SubdivisionTypeBorough SubdivisionTypeCode = "Borough" 48 | SubdivisionTypeBorough SubdivisionTypeCode = "Borough" 49 | // SubdivisionTypeCanton SubdivisionTypeCode = "Canton" 50 | SubdivisionTypeCanton SubdivisionTypeCode = "Canton" 51 | // SubdivisionTypeCapitalCity SubdivisionTypeCode = "Capital City" 52 | SubdivisionTypeCapitalCity SubdivisionTypeCode = "Capital City" 53 | // SubdivisionTypeCapitalDistrict SubdivisionTypeCode = "Capital District" 54 | SubdivisionTypeCapitalDistrict SubdivisionTypeCode = "Capital District" 55 | // SubdivisionTypeCapitalMetropolitanCity SubdivisionTypeCode = "Capital Metropolitan City" 56 | SubdivisionTypeCapitalMetropolitanCity SubdivisionTypeCode = "Capital Metropolitan City" 57 | // SubdivisionTypeCapitalTerritory SubdivisionTypeCode = "Capital Territory" 58 | SubdivisionTypeCapitalTerritory SubdivisionTypeCode = "Capital Territory" 59 | // SubdivisionTypeChainsOfIslands SubdivisionTypeCode = "Chains (of Islands)" 60 | SubdivisionTypeChainsOfIslands SubdivisionTypeCode = "Chains (of Islands)" 61 | // SubdivisionTypeCity SubdivisionTypeCode = "City" 62 | SubdivisionTypeCity SubdivisionTypeCode = "City" 63 | // SubdivisionTypeCityCorporation SubdivisionTypeCode = "City Corporation" 64 | SubdivisionTypeCityCorporation SubdivisionTypeCode = "City Corporation" 65 | // SubdivisionTypeCityWithCountyRights SubdivisionTypeCode = "City with County Rights" 66 | SubdivisionTypeCityWithCountyRights SubdivisionTypeCode = "City with County Rights" 67 | // SubdivisionTypeCommune SubdivisionTypeCode = "Commune" 68 | SubdivisionTypeCommune SubdivisionTypeCode = "Commune" 69 | // SubdivisionTypeConstitutionalProvince SubdivisionTypeCode = "Constitutional Province" 70 | SubdivisionTypeConstitutionalProvince SubdivisionTypeCode = "Constitutional Province" 71 | // SubdivisionTypeCouncilArea SubdivisionTypeCode = "Council Area" 72 | SubdivisionTypeCouncilArea SubdivisionTypeCode = "Council Area" 73 | // SubdivisionTypeCountry SubdivisionTypeCode = "Country" 74 | SubdivisionTypeCountry SubdivisionTypeCode = "Country" 75 | // SubdivisionTypeCounty SubdivisionTypeCode = "County" 76 | SubdivisionTypeCounty SubdivisionTypeCode = "County" 77 | // SubdivisionTypeDepartment SubdivisionTypeCode = "Department" 78 | SubdivisionTypeDepartment SubdivisionTypeCode = "Department" 79 | // SubdivisionTypeDependency SubdivisionTypeCode = "Dependency" 80 | SubdivisionTypeDependency SubdivisionTypeCode = "Dependency" 81 | // SubdivisionTypeDevelopmentRegion SubdivisionTypeCode = "Development Region" 82 | SubdivisionTypeDevelopmentRegion SubdivisionTypeCode = "Development Region" 83 | // SubdivisionTypeDistrict SubdivisionTypeCode = "District" 84 | SubdivisionTypeDistrict SubdivisionTypeCode = "District" 85 | // SubdivisionTypeDivision SubdivisionTypeCode = "Division" 86 | SubdivisionTypeDivision SubdivisionTypeCode = "Division" 87 | // SubdivisionTypeEconomicPrefecture SubdivisionTypeCode = "Economic Prefecture" 88 | SubdivisionTypeEconomicPrefecture SubdivisionTypeCode = "Economic Prefecture" 89 | // SubdivisionTypeEmirate SubdivisionTypeCode = "Emirate" 90 | SubdivisionTypeEmirate SubdivisionTypeCode = "Emirate" 91 | // SubdivisionTypeEntity SubdivisionTypeCode = "Entity" 92 | SubdivisionTypeEntity SubdivisionTypeCode = "Entity" 93 | // SubdivisionTypeFederalDependency SubdivisionTypeCode = "Federal Dependency" 94 | SubdivisionTypeFederalDependency SubdivisionTypeCode = "Federal Dependency" 95 | // SubdivisionTypeFederalDistrict SubdivisionTypeCode = "Federal District" 96 | SubdivisionTypeFederalDistrict SubdivisionTypeCode = "Federal District" 97 | // SubdivisionTypeFederalTerritories SubdivisionTypeCode = "Federal Territories" 98 | SubdivisionTypeFederalTerritories SubdivisionTypeCode = "Federal Territories" 99 | // SubdivisionTypeGeographicalEntity SubdivisionTypeCode = "Geographical Entity" 100 | SubdivisionTypeGeographicalEntity SubdivisionTypeCode = "Geographical Entity" 101 | // SubdivisionTypeGeographicalRegion SubdivisionTypeCode = "Geographical Region" 102 | SubdivisionTypeGeographicalRegion SubdivisionTypeCode = "Geographical Region" 103 | // SubdivisionTypeGeographicalUnit SubdivisionTypeCode = "Geographical Unit" 104 | SubdivisionTypeGeographicalUnit SubdivisionTypeCode = "Geographical Unit" 105 | // SubdivisionTypeGovernorate SubdivisionTypeCode = "Governorate" 106 | SubdivisionTypeGovernorate SubdivisionTypeCode = "Governorate" 107 | // SubdivisionTypeIndigenousRegion SubdivisionTypeCode = "Indigenous Region" 108 | SubdivisionTypeIndigenousRegion SubdivisionTypeCode = "Indigenous Region" 109 | // SubdivisionTypeIsland SubdivisionTypeCode = "Island" 110 | SubdivisionTypeIsland SubdivisionTypeCode = "Island" 111 | // SubdivisionTypeIslandCouncil SubdivisionTypeCode = "Island Council" 112 | SubdivisionTypeIslandCouncil SubdivisionTypeCode = "Island Council" 113 | // SubdivisionTypeIslandGroup SubdivisionTypeCode = "Island Group" 114 | SubdivisionTypeIslandGroup SubdivisionTypeCode = "Island Group" 115 | // SubdivisionTypeLocalCouncil SubdivisionTypeCode = "Local Council" 116 | SubdivisionTypeLocalCouncil SubdivisionTypeCode = "Local Council" 117 | // SubdivisionTypeLondonBorough SubdivisionTypeCode = "London Borough" 118 | SubdivisionTypeLondonBorough SubdivisionTypeCode = "London Borough" 119 | // SubdivisionTypeMetropolitanCities SubdivisionTypeCode = "Metropolitan Cities" 120 | SubdivisionTypeMetropolitanCities SubdivisionTypeCode = "Metropolitan Cities" 121 | // SubdivisionTypeMetropolitanDepartment SubdivisionTypeCode = "Metropolitan Department" 122 | SubdivisionTypeMetropolitanDepartment SubdivisionTypeCode = "Metropolitan Department" 123 | // SubdivisionTypeMetropolitanDistrict SubdivisionTypeCode = "Metropolitan District" 124 | SubdivisionTypeMetropolitanDistrict SubdivisionTypeCode = "Metropolitan District" 125 | // SubdivisionTypeMetropolitanRegion SubdivisionTypeCode = "Metropolitan Region" 126 | SubdivisionTypeMetropolitanRegion SubdivisionTypeCode = "Metropolitan Region" 127 | // SubdivisionTypeMunicipalities SubdivisionTypeCode = "Municipalities" 128 | SubdivisionTypeMunicipalities SubdivisionTypeCode = "Municipalities" 129 | // SubdivisionTypeMunicipality SubdivisionTypeCode = "Municipality" 130 | SubdivisionTypeMunicipality SubdivisionTypeCode = "Municipality" 131 | // SubdivisionTypeNation SubdivisionTypeCode = "Nation" 132 | SubdivisionTypeNation SubdivisionTypeCode = "Nation" 133 | // SubdivisionTypeOblast SubdivisionTypeCode = "Oblast" 134 | SubdivisionTypeOblast SubdivisionTypeCode = "Oblast" 135 | // SubdivisionTypeOutlyingArea SubdivisionTypeCode = "Outlying Area" 136 | SubdivisionTypeOutlyingArea SubdivisionTypeCode = "Outlying Area" 137 | // SubdivisionTypeOverseasDepartment SubdivisionTypeCode = "Overseas Department" 138 | SubdivisionTypeOverseasDepartment SubdivisionTypeCode = "Overseas Department" 139 | // SubdivisionTypeOverseasRegion SubdivisionTypeCode = "Overseas Region" 140 | SubdivisionTypeOverseasRegion SubdivisionTypeCode = "Overseas Region" 141 | // SubdivisionTypeOverseasTerritorialCollectivity SubdivisionTypeCode = "Overseas Territorial Collectivity" 142 | SubdivisionTypeOverseasTerritorialCollectivity SubdivisionTypeCode = "Overseas Territorial Collectivity" 143 | // SubdivisionTypeParish SubdivisionTypeCode = "Parish" 144 | SubdivisionTypeParish SubdivisionTypeCode = "Parish" 145 | // SubdivisionTypePopularates SubdivisionTypeCode = "Popularates" 146 | SubdivisionTypePopularates SubdivisionTypeCode = "Popularates" 147 | // SubdivisionTypePrefecture SubdivisionTypeCode = "Prefecture" 148 | SubdivisionTypePrefecture SubdivisionTypeCode = "Prefecture" 149 | // SubdivisionTypeProvince SubdivisionTypeCode = "Province" 150 | SubdivisionTypeProvince SubdivisionTypeCode = "Province" 151 | // SubdivisionTypeQuarter SubdivisionTypeCode = "Quarter" 152 | SubdivisionTypeQuarter SubdivisionTypeCode = "Quarter" 153 | // SubdivisionTypeRayon SubdivisionTypeCode = "Rayon" 154 | SubdivisionTypeRayon SubdivisionTypeCode = "Rayon" 155 | // SubdivisionTypeRegion SubdivisionTypeCode = "Region" 156 | SubdivisionTypeRegion SubdivisionTypeCode = "Region" 157 | // SubdivisionTypeRegionalCouncil SubdivisionTypeCode = "Regional Council" 158 | SubdivisionTypeRegionalCouncil SubdivisionTypeCode = "Regional Council" 159 | // SubdivisionTypeRepublic SubdivisionTypeCode = "Republic" 160 | SubdivisionTypeRepublic SubdivisionTypeCode = "Republic" 161 | // SubdivisionTypeRepublicanCity SubdivisionTypeCode = "Republican City" 162 | SubdivisionTypeRepublicanCity SubdivisionTypeCode = "Republican City" 163 | // SubdivisionTypeSelfGovernedPart SubdivisionTypeCode = "Self-governed Part" 164 | SubdivisionTypeSelfGovernedPart SubdivisionTypeCode = "Self-governed Part" 165 | // SubdivisionTypeSpecialAdministrativeRegion SubdivisionTypeCode = "Special Administrative Region" 166 | SubdivisionTypeSpecialAdministrativeRegion SubdivisionTypeCode = "Special Administrative Region" 167 | // SubdivisionTypeSpecialCity SubdivisionTypeCode = "Special city" 168 | SubdivisionTypeSpecialCity SubdivisionTypeCode = "Special City" 169 | // SubdivisionTypeSpecialDistrict SubdivisionTypeCode = "Special District" 170 | SubdivisionTypeSpecialDistrict SubdivisionTypeCode = "Special District" 171 | // SubdivisionTypeSpecialIslandAuthority SubdivisionTypeCode = "Special Island Authority" 172 | SubdivisionTypeSpecialIslandAuthority SubdivisionTypeCode = "Special Island Authority" 173 | // SubdivisionTypeSpecialMunicipality SubdivisionTypeCode = "Special Municipality" 174 | SubdivisionTypeSpecialMunicipality SubdivisionTypeCode = "Special Municipality" 175 | // SubdivisionTypeSpecialRegion SubdivisionTypeCode = "Special Region" 176 | SubdivisionTypeSpecialRegion SubdivisionTypeCode = "Special Region" 177 | // SubdivisionTypeSpecialZone SubdivisionTypeCode = "Special Zone" 178 | SubdivisionTypeSpecialZone SubdivisionTypeCode = "Special Zone" 179 | // SubdivisionTypeState SubdivisionTypeCode = "State" 180 | SubdivisionTypeState SubdivisionTypeCode = "State" 181 | // SubdivisionTypeTerritorialUnit SubdivisionTypeCode = "Territorial Unit" 182 | SubdivisionTypeTerritorialUnit SubdivisionTypeCode = "Territorial Unit" 183 | // SubdivisionTypeTerritory SubdivisionTypeCode = "Territory" 184 | SubdivisionTypeTerritory SubdivisionTypeCode = "Territory" 185 | // SubdivisionTypeTownCouncil SubdivisionTypeCode = "Town Council" 186 | SubdivisionTypeTownCouncil SubdivisionTypeCode = "Town Council" 187 | // SubdivisionTypeTwoTierCounty SubdivisionTypeCode = "Two-tier County" 188 | SubdivisionTypeTwoTierCounty SubdivisionTypeCode = "Two-tier County" 189 | // SubdivisionTypeUnionTerritory SubdivisionTypeCode = "Union Territory" 190 | SubdivisionTypeUnionTerritory SubdivisionTypeCode = "Union Territory" 191 | // SubdivisionTypeUnitaryAuthority SubdivisionTypeCode = "Unitary Authority" 192 | SubdivisionTypeUnitaryAuthority SubdivisionTypeCode = "Unitary Authority" 193 | // SubdivisionTypeZone SubdivisionTypeCode = "Zone" 194 | SubdivisionTypeZone SubdivisionTypeCode = "Zone" 195 | ) 196 | -------------------------------------------------------------------------------- /subdivisiontype.go: -------------------------------------------------------------------------------- 1 | package countries 2 | 3 | // SubdivisionTypeCode - the code of a subdivision 4 | type SubdivisionTypeCode string 5 | -------------------------------------------------------------------------------- /textprepare.go: -------------------------------------------------------------------------------- 1 | package countries 2 | 3 | import ( 4 | "io" 5 | "strings" 6 | "unicode" 7 | ) 8 | 9 | // NOTE: it works very more faster than strings.Replacer and regexp.Regexp 10 | func textPrepare(text string) string { 11 | indx := strings.Index(text, "(") 12 | if indx > -1 { 13 | text = text[:indx] 14 | } 15 | 16 | reader := strings.NewReader(text) 17 | text = "" 18 | 19 | var r rune 20 | var err error 21 | for { 22 | r, _, err = reader.ReadRune() 23 | if err == io.EOF { 24 | break 25 | } 26 | if unicode.IsLetter(r) { 27 | text += string(r) 28 | } 29 | } 30 | 31 | return strings.ToUpper(text) 32 | } 33 | -------------------------------------------------------------------------------- /travis.yml: -------------------------------------------------------------------------------- 1 | language: go 2 | -------------------------------------------------------------------------------- /value.go: -------------------------------------------------------------------------------- 1 | package countries 2 | 3 | // Value - for database/sql/driver.Valuer compatibility 4 | // Value is a value that drivers must be able to handle. 5 | // It is either nil, a type handled by a database driver's NamedValueChecker 6 | // interface, or an instance of one of these types: 7 | // 8 | // int64 9 | // float64 10 | // bool 11 | // []byte 12 | // string 13 | // time.Time 14 | // 15 | // If the driver supports cursors, a returned Value may also implement the Rows interface 16 | // in this package. This is used, for example, when a user selects a cursor 17 | // such as "select cursor(select * from my_table) from dual". If the Rows 18 | // from the select is closed, the cursor Rows will also be closed. 19 | type Value interface{} 20 | --------------------------------------------------------------------------------