Current section

Files

Jump to
skema lib result.ex
Raw

lib/result.ex

defmodule Skema.Result do
@moduledoc """
Result Struct for Skema operations
"""
@enforce_keys [:schema]
defstruct schema: %{},
valid_data: %{},
params: %{},
errors: %{},
valid?: true
@doc """
Create a new Result struct with given schema map and params.
"""
@spec new(%{}) :: %Skema.Result{}
def new(attrs) do
struct(__MODULE__, attrs)
end
@doc """
Put error to result.
"""
@spec put_error(%Skema.Result{}, field :: atom, error :: String.t()) :: %Skema.Result{}
def put_error(result, field, error) do
errors =
case get_error(result, field) do
nil -> error
errors -> [error | errors]
end
%Skema.Result{result | errors: Map.put(result.errors, field, errors), valid?: false}
end
@doc """
Put valid data to result.
"""
@spec put_data(%Skema.Result{}, field :: atom, value :: any) :: %Skema.Result{}
def put_data(result, field, value) do
%Skema.Result{result | valid_data: Map.put(result.valid_data, field, value)}
end
@doc """
Get error from result for given field.
"""
@spec get_error(%Skema.Result{}, field :: atom) :: String.t() | nil
def get_error(result, field) do
Map.get(result.errors, field)
end
end