defmodule Nostrum.Struct.Guild.AuditLog do @moduledoc """ Represents a guild's audit log. """ alias Nostrum.Struct.Guild.AuditLogEntry alias Nostrum.Struct.{User, Webhook} alias Nostrum.Util defstruct [:entries, :users, :webhooks] @typedoc "Entries of this guild's audit log" @type entries :: [AuditLogEntry.t()] @typedoc "Users found in the audit log" @type users :: [User.t()] @typedoc "Webhooks found in the audit log" @type webhooks :: [Webhook.t()] @type t :: %__MODULE__{ entries: entries, users: users, webhooks: webhooks } @doc false def to_struct(map) do new = map |> Map.new(fn {k, v} -> {Util.maybe_to_atom(k), v} end) |> Map.put(:entries, Util.cast(map[:audit_log_entries], {:list, {:struct, AuditLogEntry}})) |> Map.delete(:audit_log_entries) |> Map.update(:users, nil, &Util.cast(&1, {:list, {:struct, User}})) |> Map.update(:webhooks, nil, &Util.cast(&1, {:list, {:struct, Webhook}})) struct(__MODULE__, new) end end