defmodule AccessGrid.AccessPass do
@moduledoc """
Represents an access pass — the credential issued to an end user. Returned
by `AccessGrid.AccessPasses` operations (issue, get, update, list, suspend,
resume, unlink, delete).
"""
@type t :: %__MODULE__{
id: String.t() | nil,
state: String.t() | nil,
install_url: String.t() | nil,
direct_install_url: String.t() | nil,
full_name: String.t() | nil,
expiration_date: String.t() | nil,
card_template_id: String.t() | nil,
card_number: String.t() | nil,
site_code: String.t() | nil,
file_data: map() | nil,
devices: list(),
metadata: map()
}
defstruct [
:id,
:state,
:install_url,
:direct_install_url,
:full_name,
:expiration_date,
:card_template_id,
:card_number,
:site_code,
:file_data,
devices: [],
metadata: %{}
]
@doc """
Creates an AccessPass struct from an API response map.
"""
@spec from_response(map()) :: t()
def from_response(data) when is_map(data) do
%__MODULE__{
id: data["id"],
state: data["state"],
install_url: data["install_url"],
direct_install_url: data["direct_install_url"],
full_name: data["full_name"],
expiration_date: data["expiration_date"],
card_template_id: data["card_template_id"],
card_number: data["card_number"],
site_code: data["site_code"],
file_data: data["file_data"],
devices: data["devices"] || [],
metadata: data["metadata"] || %{}
}
end
end