Closed solnic closed 1 year ago
This adds support for defining optional keys. Such keys can be omitted and it won't cause any validation errors.
defmodule TestContract do use Drops.Contract schema do %{ required(:email) => type(:string, [:filled?]), optional(:name) => type(:string, [:filled?]) } end end TestContract.conform(%{}) # {:error, [error: {:has_key?, :email}]} TestContract.conform(%{email: "", name: ""}) # {:error, [error: {:filled?, :name, ""}, error: {:filled?, :email, ""}]} TestContract.conform(%{email: "jane@doe.org", name: ""}) # {:error, [error: {:filled?, :name, ""}]} TestContract.conform(%{email: "jane@doe.org"}) # {:ok, %{email: "jane@doe.org"}} TestContract.conform(%{email: "jane@doe.org", name: "Jane"}) # {:ok, %{name: "Jane", email: "jane@doe.org"}}
This adds support for defining optional keys. Such keys can be omitted and it won't cause any validation errors.