Skip to content

Repository files navigation

This is WIP.

ServiceOCamlService
Circle4.06Build Status

Changeset

Data validation with first-class and first-order labels in OCaml.

Homepage for the library is available here.

Changesets are tools to validate data while accumulating errors along the way. They are composed of:

  • Changes: an heterogeneous map whose keys are of type 'a label and values 'a. When deriving a changeset from a record type definition, the labels correspond to the fields of this one.

  • Errors: a list of strings associated with labels.

Labels are first-class, that means you can give them as argument to functions, and first-order, so you can pattern match against them. The library promotes the pipeline design approach.

There is a ppx deriving plugin so there is no need to write any boilerplate code.

Install using opam

$ opam pin add changeset_lib https://github.com/phink/changeset.git
$ opam pin add ppx_changeset https://github.com/phink/changeset.git

Update the libraries and preprocess section in your jbuild file:

(libraries (... changeset))
(preprocess (pps (... ppx_changeset)))

Minimal example

typet = {
age: int;phone: string;password: string;
} [@@deriving changeset]
letvalidatecset=
cset
|>Changeset.validate_int Age [`greater_than_or_equal_to0]
|>Changeset.validate_string_length Password [`min12]
|>Changeset.validate_format Phone (Str.regexp "^\\+?[1-9][0-9]+$")
letcreatet=let cset =Changeset.from_record t inChangeset.apply (validate cset)
let data = {age =12; password ="dolphin"; phone ="+14155552671"}
let()=match create data with|Okt -> (* do what you want *)|Errorcset ->
Stdio.prerr_endline (Changeset.show_errors cset)

Execution

{
"errors":{
"password":"should be at least 12 character(s)"
}
}

Limitations

Parameterized source types are not yet supported.

About

(unreleased) Data validation with first-class and first-order labels in OCaml

Topics

Resources

Stars

30 stars

Watchers

3 watching

Forks

Releases

Packages

Used by

Contributors

Languages