Packages
oidcc
3.6.0
3.7.2
3.7.1
3.7.0
3.6.0
3.5.2
3.5.1
3.5.0
retired
3.4.0
3.3.0
3.2.6
3.2.5
3.2.4
3.2.3
3.2.2
3.2.1
3.2.0
3.2.0-beta.3
3.2.0-beta.2
retired
3.2.0-beta.1
retired
3.1.2
3.1.2-beta.1
retired
3.1.1
retired
3.1.0
retired
3.1.0-beta.2
retired
3.1.0-beta.1
retired
3.0.2
3.0.1
retired
3.0.0
retired
3.0.0-rc.6
retired
3.0.0-rc.5
retired
3.0.0-rc.4
retired
3.0.0-rc.3
retired
3.0.0-rc.2
retired
3.0.0-rc.1
retired
3.0.0-alpha.5
retired
3.0.0-alpha.4
retired
3.0.0-alpha.3
retired
3.0.0-alpha.2
retired
3.0.0-alpha.1
retired
2.0.0-alpha.2
retired
2.0.0-alpha.1
retired
1.8.1
retired
1.8.0
retired
1.7.0
retired
1.6.0
retired
1.5.1
retired
1.5.0
retired
1.4.0
retired
1.3.0
retired
1.2.1
retired
1.2.0
retired
1.1.0
retired
1.0.1
retired
1.0.0
retired
OpenID Connect client library for the BEAM.
Current section
Files
Jump to
Current section
Files
lib/record_struct.ex
defmodule Oidcc.RecordStruct do
@moduledoc false
@callback record_to_struct(record :: tuple()) :: struct()
@callback struct_to_record(struct :: struct()) :: tuple()
defmacro __using__(options) do
internal_name = Keyword.fetch!(options, :internal_name)
record_name = Keyword.fetch!(options, :record_name)
record_type_module = Keyword.get(options, :record_type_module, record_name)
record_type_name = Keyword.get(options, :record_type_name, :t)
hrl = Keyword.fetch!(options, :hrl)
quote bind_quoted: [
internal_name: internal_name,
record_name: record_name,
record_type_module: record_type_module,
record_type_name: record_type_name,
hrl: hrl,
behaviour: __MODULE__
] do
@behaviour behaviour
require Record
record = Record.extract(record_name, from: hrl)
keys = :lists.map(&elem(&1, 0), record)
vals = :lists.map(&{&1, [], nil}, keys)
pairs = :lists.zip(keys, vals)
Record.defrecordp(internal_name, record_name, record)
defstruct record
@doc false
@impl behaviour
@spec record_to_struct(record :: unquote(record_type_module).unquote(record_type_name)()) ::
t()
def record_to_struct(record), do: struct!(__MODULE__, unquote(internal_name)(record))
@doc false
@impl behaviour
@spec struct_to_record(struct :: t()) ::
unquote(record_type_module).unquote(record_type_name)()
def struct_to_record(%__MODULE__{unquote_splicing(pairs)}),
do: {unquote(record_name), unquote_splicing(vals)}
defoverridable record_to_struct: 1, struct_to_record: 1
end
end
end