/govalid

Data validation library for golang. [MIGRATING TO NEW ADDRESS]

Primary LanguageGoThe UnlicenseUnlicense

Govalid godoc Build Status Coverage Status License: Unlicense

Govalid is a data validation library that can validate most data types supported by golang. Custom validators can be used where the supplied ones are not enough.

import v "github.com/gima/govalid/v1"

Example

Create a validator:

schema := v.Object(
	v.ObjKV("status", v.Boolean()),
	v.ObjKV("data", v.Object(
		v.ObjKV("token", v.Function(myValidatorFunc)),
		v.ObjKV("debug", v.Number(v.NumMin(1), v.NumMax(99999))),
		v.ObjKV("items", v.Array(v.ArrEach(v.Object(
			v.ObjKV("url", v.String(v.StrMin(1))),
			v.ObjKV("comment", v.Optional(v.String())),
		)))),
		v.ObjKV("ghost", v.Optional(v.String())),
		v.ObjKV("ghost2", v.Optional(v.String())),
		v.ObjKV("meta", v.Object(
			v.ObjKeys(v.String()),
			v.ObjValues(v.Or(v.Number(v.NumMin(.01), v.NumMax(1.1)), v.String())),
		)),
	)),
)

Validate some data using the created validator:

if path, err := schema.Validate(data); err == nil {
	t.Log("Validation passed.")
} else {
	t.Fatalf("Validation failed at %s. Error (%s)", path, err)
}
// Example of failed validation:

// Validation failed at Object->Key[data].Value->Object->Key[debug].Value->Number.
// Error (expected (*)data convertible to float64, got bool)

You can also take a look at the "tests/" folder. (Sorry, but if you feel more documentation is needed, please open an issue.)

Similar libraries

Go check
Javascript js-schema, jsonvalidator
Python voluptuous, json_schema
Ruby json-schema

Original idea for jsonv (version 0 of this library, before rename) loosely based on js-schema, thank you.

License

http://unlicense.org
Authoritative: UNLICENSE.txt
Mention of origin would be appreciated.

jsonv, jsonv2, json validator, json validation, alternative, go, golang