A simple list of countries for scala projects.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Jens Grassel 01482ca006 Merge pull request 'Update wartremover to 2.4.10' (#12) from jan0sch/countries:updates/wartremover-2.4.10 into main 4 days ago
project Update wartremover to 2.4.10 4 days ago
src Update cats to 2.2.0 3 weeks ago
.gitignore Update refined to 0.9.17 3 weeks ago
.scalafmt.conf Initial commit 4 months ago
AUTHORS.md Initial commit 4 months ago
CHANGELOG.md Update cats to 2.2.0 3 weeks ago
CONTRIBUTING.md Contribution guide 4 months ago
LICENSE Initial commit 4 months ago
NOTICE Initial commit 4 months ago
README.md Code Cleanup 1 month ago
build.sbt Update scalatest to 3.2.2 3 weeks ago


A list of countries.


This library simply provides a list of countries as data models.

In case you need a basic country model or simply a list which should contain most (if not all) countries then we got you covered.


The following libraries are used and expected to be provided by your project:

  • Cats
  • Circe
  • Enumeratum
  • Refined


scala> import com.wegtam.countries._, eu.timepit.refined.auto._
scala> Country.values.headOption
res0: Option[com.wegtam.countries.Country] = Some(Afghanistan)
scala> Country.fromAlpha2("DE")
res1: Either[String,com.wegtam.countries.Country] = Right(Germany)
scala> Country.fromAlpha2("XX")
res2: Either[String,com.wegtam.countries.Country] = Left(No such country!)
scala> Country.fromAlpha3("ESH")
res3: Either[String,com.wegtam.countries.Country] = Right(WesternSahara)
scala> Country.fromNumeric("858")
res4: Either[String,com.wegtam.countries.Country] = Right(Uruguay)
scala> import codecs.circe.alpha2._, io.circe.syntax._
scala> Country.fromNumeric("858").map(_.asJson)
res5: scala.util.Either[String,io.circe.Json] = Right("UY")

Circe Codecs

Because quite often you need JSON, we provide several codecs. Please import the ones that you prefer. Currently three codecs are provided:

  1. decode / encode from / to the alpha-2 country code (codecs.circe.alpha2)
  2. decode / encode from / to the alpha-3 country code (codecs.circe.alpha3)
  3. decode / encode from / to the numeric country code (codecs.circe.numeric)

Please note that the “numeric” encoder will still produce strings because there are codec with leading zeros!

Getting started

Just add the bintray resolver to your build configuration to be able to include the library.

resolvers += "Wegtam-Free" at "https://dl.bintray.com/wegtam/free"
libraryDependencies += "com.wegtam" %% "countries" % VERSION

For development and testing you need to install sbt. Please see CONTRIBUTING.md for details how to to contribute to the project.