https://github.com/prio/shape
A data validation library for Elixir based on Prismatic Scheme
https://github.com/prio/shape
Last synced: 16 days ago
JSON representation
A data validation library for Elixir based on Prismatic Scheme
- Host: GitHub
- URL: https://github.com/prio/shape
- Owner: prio
- License: apache-2.0
- Created: 2015-06-24T21:06:41.000Z (over 10 years ago)
- Default Branch: master
- Last Pushed: 2015-06-25T20:08:43.000Z (over 10 years ago)
- Last Synced: 2025-10-19T21:49:28.253Z (18 days ago)
- Language: Elixir
- Homepage:
- Size: 137 KB
- Stars: 6
- Watchers: 1
- Forks: 2
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- freaking_awesome_elixir - Elixir - A data validation library for Elixir based on Prismatic Scheme. (Validations)
- fucking-awesome-elixir - shape - A data validation library for Elixir based on Prismatic Scheme. (Validations)
- awesome-elixir - shape - A data validation library for Elixir based on Prismatic Scheme. (Validations)
README
Shape
=====
Shape is library that allows you to declaratively describe and validate your data structures.
To use add
[{:shape, "0.0.2"}]
to your mix dependencies.
Example Usage:
iex> alias Shape, as: S
nil
iex> S.validate(S.Num, 42)
:ok
iex> S.validate(S.Num, "42")
{:error, "42 is not a number"}
# Check list shape
iex> S.validate([S.Atom, S.Str, S.Int], [:a, "b", 1])
:ok
iex> S.validate([S.Int], [1, 2, 3])
:ok
iex> S.validate([S.Str, S.Int, S.Int], [:a, "b", 1])
{:error, ["a is not a string", "b is not a integer"]}
# Check map shape
iex> S.validate(%{S.Atom => S.Str}, %{o: "k"})
:ok
iex> S.validate(%{S.Atom => S.Int, S.Str => S.Int}, %{"o" => "k", "o" => :k})
{:error, ["o is not a atom", "k is not a integer"]}
# Check map key values rather than types
iex> S.validate(%{:o => S.Str, "o" => S.Str}, %{:o => "k", "o" => "k"})
:ok
iex> S.validate(%{:b => S.Str, "o" => S.Str}, %{:o => "k", "o" => "k"})
{:error, ["o is not equal to b"]}
# check Keyword list shape
iex> S.validate([o: S.Str, a: S.Str], [o: "k", a: "ok"])
:ok
iex> S.validate([o: S.Int, b: S.Str], [o: "k", a: "ok"])
{:error, ["a is not equal to b", "k is not a integer"]}