Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up

Fast, extensible and easy to use data structure validation for elixir with nested structures support.

License

NotificationsYou must be signed in to change notification settings

bydooweedoo/is

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Fast, extensible and easy to use data structure validation forelixir with nested structures support.

Installation

Ifavailable in Hex, the package can be installedby addingis to your list of dependencies inmix.exs:

defdepsdo[{:is,"~> 1.0.0"}]end

Documentation can be generated withExDocand published onHexDocs. Once published, the docs canbe found athttps://hexdocs.pm/is.

Example

iex>data=Enum.map(1..2,&(%{...>a:1,...>b:"b",...>c:{"a","b",false},...>d:[[1,2,"3"],[4,false,6]],...>e:-1,...>f:"1234567891011",...>index:&1-10,...>}))iex>schema=[list:[map:%{...>a::binary,...>b::boolean,...>c:[list:[or:[:binary,:boolean]]],...>d:[list:[list::integer]],...>e:[and:[:optional,:binary]],...>index:[and:[:integer,in_range:[min:0]]],...>}]]iex>Is.validate(data,schema)[{:error,[0,:a],"must be a binary"},{:error,[0,:b],"must be a boolean"},{:error,[0,:c],"must be a list"},{:error,[0,:d,0,2],"must be an integer"},{:error,[0,:d,1,1],"must be an integer"},{:error,[0,:e],"must be a binary"},{:error,[0,:index],"must at least be 0"},{:error,[1,:a],"must be a binary"},{:error,[1,:b],"must be a boolean"},{:error,[1,:c],"must be a list"},{:error,[1,:d,0,2],"must be an integer"},{:error,[1,:d,1,1],"must be an integer"},{:error,[1,:e],"must be a binary"},{:error,[1,:index],"must at least be 0"},]

Validations

Basic types

:atom

Test if data is an atom or not

iex>Is.validate(:value,:atom)[]iex>Is.validate(:value,atom:true)[]iex>Is.validate(1,:atom)[{:error,[],"must be a atom"}]iex>Is.validate(:value,atom:false)[{:error,[],"must not be a atom"}]

:binary

Test if data is a binary or not

iex>Is.validate("value",:binary)[]iex>Is.validate("value",binary:true)[]iex>Is.validate(1,:binary)[{:error,[],"must be a binary"}]iex>Is.validate("value",binary:false)[{:error,[],"must not be a binary"}]

:boolean

Test if data is a boolean or not

iex>Is.validate(true,:boolean)[]iex>Is.validate(true,boolean:true)[]iex>Is.validate(1,:boolean)[{:error,[],"must be a boolean"}]iex>Is.validate(true,boolean:false)[{:error,[],"must not be a boolean"}]

:equals

Test if data equals given value

iex>Is.validate(true,equals:true)[]iex>Is.validate("str",equals:"str")[]iex>Is.validate(1,equals:true)[{:error,[],"must equals true"}]

:fn

Test if data equals given value

iex>Is.validate(1,fn:&is_number/1)[]iex>Is.validate(true,fn:&is_number/1)[{:error,[],"must satisfies &:erlang.is_number/1"}]iex>starts_with? =fn(value,prefix) ->...>ifString.starts_with?(value,prefix)do...>:ok...>else...>{:error,"must start with#{inspectprefix}"}...>end...>endiex>Is.validate("https://elixir-lang.org",fn:[starts_with?,"http"])[]iex>Is.validate("elixir-lang.org",fn:[starts_with?,"http"])[{:error,[],"must start with\"http\""}]iex>Is.validate(12,fn:{1,2})[{:error,[],"fn: options are invalid"}]

About

Fast, extensible and easy to use data structure validation for elixir with nested structures support.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages


[8]ページ先頭

©2009-2025 Movatter.jp