Current section

Files

Jump to
altstd_compact lib altstd compact atom.ex
Raw

lib/altstd/compact/atom.ex

defimpl Altstd.Compact, for: Atom do
@moduledoc since: "0.1.0"
@doc since: "0.1.0"
@spec resolve(atom(), keyword) :: Altstd.Compact.resolution_t()
def resolve(object, opts \\ [])
def resolve(nil, _opts) do
{:reject, nil}
end
def resolve(false, _opts) do
{:reject, false}
end
def resolve(:error, _opts) do
{:reject, :error}
end
def resolve(:reject, _opts) do
{:reject, :reject}
end
def resolve(object, _opts) do
len =
object
|> Atom.to_string()
|> String.length()
case len do
0 ->
{:reject, object}
_any ->
{:resolve, object}
end
end
@doc since: "0.1.0"
@spec cast(atom(), keyword) :: Altstd.Compact.t()
def cast(object, opts \\ []) do
resolution =
object
|> Altstd.Compact.resolve(opts)
case resolution do
{:resolve, resolved_value} ->
resolved_value
|> List.wrap()
{:reject, _any} ->
[]
:reject ->
[]
resolved_value ->
resolved_value
|> List.wrap()
end
end
end