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