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.{AuditLogEntry, User, Util, Webhook}
require Util
Util.modulesince("0.1.6")
defstruct(
webhooks: %{},
users: %{},
audit_log_entries: %{}
)
Util.typesince("0.1.6")
@type t :: %__MODULE__{
webhooks: %{Crux.Rest.snowflake() => Webhook.t()},
users: %{Crux.Rest.snowflake() => User.t()},
audit_log_entries: %{Crux.Rest.snowflake() => AuditLogEntry.t()}
}
@doc """
Creates a `Crux.Structs.AuditLog` 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(:audit_log_entries, [], &Util.raw_data_to_map(&1, AuditLogEntry))
struct(__MODULE__, audit_log)
end
end