Skip to content

Conditional Flows

This content is for v0.7. Switch to the latest version for up-to-date documentation.

Merge another Validation only when the condition is true.

val := v.
Is(v.String(username, "username").Not().Blank()).
If(isAdmin, v.Is(v.String(role, "role").EqualTo("admin")))

Run arbitrary logic in the chain.

val := v.
Is(v.String(username, "username").Not().Blank()).
Do(func(val *v.Validation) {
if isAdmin {
val.Is(v.String(role, "role").EqualTo("admin"))
}
})

Like Do, but gated by a boolean.

val := v.
Is(v.String(username, "username").Not().Blank()).
When(isAdmin, func(val *v.Validation) {
val.Is(v.String(role, "role").EqualTo("admin"))
})

These evaluate validity from the current result and conditionally merge/execute:

  • IfPathValid, IfAllValid, IfAnyValid, IfValid
  • WhenPathValid, WhenAllValid, WhenAnyValid, WhenValid

Use WhenValid when you want to skip costly work if validation already failed.