Current section
Files
Jump to
Current section
Files
lib/altstd/compact/list.ex
defimpl Altstd.Compact, for: List do
@moduledoc since: "0.1.0"
@doc since: "0.1.0"
@spec resolve(list(), keyword) :: Altstd.Compact.resolution_t()
def resolve(object, opts \\ [])
def resolve(object, _opts) when length(object) == 0 do
{:reject, object}
end
def resolve(object, opts) do
compact_list =
object
|> Enum.reduce([], fn value, acc ->
resolution =
value
|> Altstd.Compact.resolve(opts)
case resolution do
{:resolve, resolved_value} ->
acc ++ [resolved_value]
{:reject, _any} ->
acc
:reject ->
acc
resolved_value ->
acc ++ [resolved_value]
end
end)
case length(compact_list) do
0 ->
{:reject, object}
_any ->
{:resolve, compact_list}
end
end
@doc since: "0.1.0"
@spec cast(list(), keyword) :: Altstd.Compact.t()
def cast(object, opts \\ []) do
resolution =
object
|> Altstd.Compact.resolve(opts)
case resolution do
{:resolve, resolved_value} ->
resolved_value
{:reject, _any} ->
[]
:reject ->
[]
resolved_value ->
resolved_value
end
end
end