ndto
is an Erlang library for generating DTO (Data Transfer Object) validation modules from schemas.
Validating incoming data is a critical step to ensure the integrity, consistency, and security of your application's data flow. However, writing custom validation logic for each DTO can quickly become a time-consuming and error-prone task.
With ndto
, you can define validation schemas that describe the structure and constraints of your data. These schemas are then used to automatically generate validation modules, reducing development time and avoiding human-induced errors in the validation step.
- Add
ndto
as a dependency in yourrebar.config
file:
{deps, [
{ndto, {git, "https://github.com/nomasystems/ndto.git", {branch, "main"}}}
]}.
- Define an
ndto
schema.
Schema = #{
type => string,
min_length => 8,
pattern => <<"^hello">>
}.
- Generate a module using the
ndto:generate/2
function.
DTO = ndto:generate(string_schema, Schema).
- Load the generated module on the fly.
ok = ndto:load(DTO).
- Call the
is_valid/1
function from the generated module to validate your data.
true = string_schema:is_valid(<<"hello world">>).
{false, _MinLengthError} = string_schema:is_valid(<<"hello">>).
{false, _PatternError} = string_schema:is_valid(<<"hi world">>).
Schemas are built according to the ndto:schema()
type.
%%% ndto.erl
-type schema() ::
empty_schema()
| universal_schema()
| ref_schema()
| enum_schema()
| boolean_schema()
| integer_schema()
| float_schema()
| string_schema()
| array_schema()
| object_schema()
| union_schema()
| intersection_schema()
| complement_schema()
| symmetric_difference_schema().
Check the docs for an up-to-date version of the type specifications.
We ❤️ contributions! Please feel free to submit issues, create pull requests or just spread the word about ndto
in the open-source community. Don't forget to check out our contribution guidelines to ensure smooth collaboration! 🚀
If you need help or have any questions, please don't hesitate to open an issue or contact the maintainers directly.
ndto
is released under the Apache 2.0 License. For more information, please see the LICENSE file.
This project uses OpenAPI specification (OAS) schemas and examples, which are licensed under the Apache 2.0 license. See the associated LICENSE file for more information.