Packages

Elixir client SDK for the Surge API

Current section

Files

Jump to
surge_api lib surge verifications verification.ex
Raw

lib/surge/verifications/verification.ex

defmodule Surge.Verifications.Verification do
@moduledoc """
A phone number verification.
"""
@type status :: :pending | :verified | :exhausted | :expired
@type t :: %__MODULE__{
id: String.t(),
attempt_count: integer() | nil,
phone_number: String.t() | nil,
status: status() | nil
}
defstruct [
:id,
:attempt_count,
:phone_number,
:status
]
@doc """
Converts JSON response to Verification struct.
## Examples
iex> data = %{"id" => "ver_123", "phone_number" => "+15551234567", "status" => "pending"}
iex> Surge.Verifications.Verification.from_json(data)
%Surge.Verifications.Verification{id: "ver_123", phone_number: "+15551234567", status: :pending}
"""
@spec from_json(map()) :: t()
def from_json(data) when is_map(data) do
%__MODULE__{
id: data["id"],
attempt_count: data["attempt_count"],
phone_number: data["phone_number"],
status: parse_status(data["status"])
}
end
# Private
@spec parse_status(String.t() | nil) :: status() | nil
defp parse_status(nil), do: nil
defp parse_status("pending"), do: :pending
defp parse_status("verified"), do: :verified
defp parse_status("exhausted"), do: :exhausted
defp parse_status("expired"), do: :expired
defp parse_status(_), do: nil
end