Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/prio/shape
A data validation library for Elixir based on Prismatic Scheme
https://github.com/prio/shape
Last synced: 3 months 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 9 years ago)
- Default Branch: master
- Last Pushed: 2015-06-25T20:08:43.000Z (over 9 years ago)
- Last Synced: 2024-10-19T01:47:05.677Z (3 months ago)
- Language: Elixir
- Homepage:
- Size: 137 KB
- Stars: 6
- Watchers: 2
- 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
niliex> S.validate(S.Num, 42)
:okiex> 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])
:okiex> S.validate([S.Int], [1, 2, 3])
:okiex> 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"})
:okiex> 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"})
:okiex> 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"])
:okiex> S.validate([o: S.Int, b: S.Str], [o: "k", a: "ok"])
{:error, ["a is not equal to b", "k is not a integer"]}