Current section

Files

Jump to
pillar lib vin_decode.ex
Raw

lib/vin_decode.ex

defmodule VinDecode do
@moduledoc """
Documentation for VinDecode.
"""
alias VinDecode.Dictionaries.Countries
alias VinDecode.Dictionaries.Years
alias VinDecode.Dictionaries.Wmi
alias VinDecode.Validation
@spec info(any) :: {:ok, any} | {:error, any}
def info(vin) when is_binary(vin) do
cond do
String.length(vin) != 17 ->
{:error, :invalid_length}
!Validation.valid?(vin) ->
{:error, :invalid_checksum}
true ->
%{
year: Years.year(vin),
country: Countries.country(vin),
manafacturer: Wmi.manafacturer(vin),
serial: serial(vin)
}
end
end
def info(_vin) do
{:error, :invalid_value}
end
defp serial(vin) do
String.slice(vin, 11..16)
end
end