Current section
Files
Jump to
Current section
Files
lib/structs/audit_log.ex
defmodule Crux.Structs.AuditLog do
@moduledoc """
Represents a Discord [Audit Log Object](https://discordapp.com/developers/docs/resources/audit-log#audit-log-object).
"""
@behaviour Crux.Structs
alias Crux.Structs.{AuditLog, AuditLogEntry, Integration, Snowflake, User, Util, Webhook}
require Util
Util.modulesince("0.1.6")
defstruct(
webhooks: %{},
users: %{},
integrations: %{},
audit_log_entries: %{}
)
Util.typesince("0.1.6")
@type t :: %__MODULE__{
webhooks: %{Snowflake.t() => Webhook.t()},
users: %{Snowflake.t() => User.t()},
integrations: %{Snowflake.t() => Integration.t()},
audit_log_entries: %{Snowflake.t() => AuditLogEntry.t()}
}
@typedoc """
All available types that can be resolved into an audit log id.
"""
Util.typesince("0.2.1")
@type id_resolvable() :: AuditLog.t() | Snowflake.t() | String.t()
@doc """
Creates a `t:Crux.Structs.AuditLog.t/0` struct from raw data.
> Automatically invoked by `Crux.Structs.create/2`.
"""
@spec create(data :: map()) :: t()
Util.since("0.1.6")
def create(data) do
audit_log =
data
|> Util.atomify()
|> Map.update(:webhooks, [], &Util.raw_data_to_map(&1, Webhook))
|> Map.update(:users, [], &Util.raw_data_to_map(&1, User))
|> Map.update(:integrations, [], &Util.raw_data_to_map(&1, Integration))
|> Map.update(:audit_log_entries, [], &Util.raw_data_to_map(&1, AuditLogEntry))
struct(__MODULE__, audit_log)
end
end