defmodule AccessGrid.CredentialProfile do @moduledoc """ Credential profile bound to a specific reader app (e.g. `"KEY-ID-main"`). Returned by `AccessGrid.Console.list_credential_profiles/1` and `AccessGrid.Console.create_credential_profile/2`. `keys` and `files` are kept as raw lists of maps with string keys, matching the SDK convention for embedded config blocks (see `Template.support_settings`). Each `keys` entry: `{ex_id, label, keys_diversified, source_key_index}`. Each `files` entry: `{ex_id, file_type, file_size, communication_settings, read_rights, write_rights, read_write_rights, change_rights}`. """ @type t :: %__MODULE__{ id: String.t() | nil, aid: String.t() | nil, name: String.t() | nil, apple_id: String.t() | nil, created_at: String.t() | nil, card_storage: String.t() | nil, keys: list(map()), files: list(map()) } defstruct [ :id, :aid, :name, :apple_id, :created_at, :card_storage, keys: [], files: [] ] @doc """ Creates a CredentialProfile struct from an API response map. """ @spec from_response(map()) :: t() def from_response(data) when is_map(data) do %__MODULE__{ id: data["id"], aid: data["aid"], name: data["name"], apple_id: data["apple_id"], created_at: data["created_at"], card_storage: data["card_storage"], keys: data["keys"] || [], files: data["files"] || [] } end end