Packages

Ports is a collection of United Nations Code for Trade and Transport Locations or known as "UN/LOCODE".

Current section

Files

Jump to
ports lib loader.ex
Raw

lib/loader.ex

defmodule Ports.Loader do
@moduledoc false
alias Ports.{
Country,
Function,
Port,
Status,
Subdivision
}
def load_code_list do
"code-list.csv"
|> csv_decode()
|> Stream.map(fn {:ok, line} ->
[
_change,
country,
location,
name,
_name_wo_diacritics,
subdivision,
status,
function,
date,
iata,
coordinates,
_remarks
] = line
%Port{
country: country,
location: location,
name: name,
subdivision: subdivision,
status: status,
function: function,
date: date,
iata: iata,
coordinates: coordinates
}
end)
|> Enum.to_list()
end
def load_countries do
"country-codes.csv"
|> csv_decode()
|> Stream.map(fn {:ok, line} ->
[
country_code,
country_name
] = line
%Country{
code: country_code,
name: country_name
}
end)
|> Enum.to_list()
end
def load_functions do
"function-classifiers.csv"
|> csv_decode()
|> Stream.map(fn {:ok, line} ->
[
function_code,
function_description
] = line
%Function{
code: function_code,
description: function_description
}
end)
|> Enum.to_list()
end
def load_statuses do
"status-indicators.csv"
|> csv_decode()
|> Stream.map(fn {:ok, line} ->
[
status_code,
status_description
] = line
%Status{
code: status_code,
description: status_description
}
end)
|> Enum.to_list()
end
def load_subdivisions do
"subdivision-codes.csv"
|> csv_decode()
|> Stream.map(fn {:ok, line} ->
[
status_country,
status_code,
status_name
] = line
%Subdivision{
country: status_country,
code: status_code,
name: status_name
}
end)
|> Enum.to_list()
end
defp csv_decode(file_name) do
[:code.priv_dir(:ports), "data", file_name]
|> Path.join()
|> File.stream!([], :line)
|> CSV.decode()
end
end