Packages

Elixir client SDK for the Surge API

Current section

Files

Jump to
surge_api lib surge verifications verification_check.ex
Raw

lib/surge/verifications/verification_check.ex

defmodule Surge.Verifications.VerificationCheck do
@moduledoc """
The result of checking a Verification code.
"""
alias Surge.Verifications.Verification
@type result :: :ok | :incorrect | :exhausted | :expired | :already_verified
@type t :: %__MODULE__{
result: result() | nil,
verification: Verification.t() | nil
}
defstruct [
:result,
:verification
]
@doc """
Converts JSON response to VerificationCheck struct.
## Examples
iex> data = %{"result" => "ok"}
iex> Surge.Verifications.VerificationCheck.from_json(data)
%Surge.Verifications.VerificationCheck{result: :ok}
"""
@spec from_json(map()) :: t()
def from_json(data) when is_map(data) do
%__MODULE__{
result: parse_result(data["result"]),
verification: parse_verification(data["verification"])
}
end
# Private
@spec parse_result(String.t() | nil) :: result() | nil
defp parse_result(nil), do: nil
defp parse_result("ok"), do: :ok
defp parse_result("incorrect"), do: :incorrect
defp parse_result("exhausted"), do: :exhausted
defp parse_result("expired"), do: :expired
defp parse_result("already_verified"), do: :already_verified
defp parse_result(_), do: nil
@spec parse_verification(map() | nil) :: Verification.t() | nil
defp parse_verification(nil), do: nil
defp parse_verification(data) when is_map(data), do: Verification.from_json(data)
end