This documentation is still new and evolving. If you spot any mistakes, unclear explanations, or missing details, please open an issue.
Your feedback helps us improve!
ozzo/ozzo-validation operatorsโ
This page lists all operators available in the ozzo/ozzo-validation sub-package of ro.
Installโ
First, import the sub-package in your project:
go get -u github.com/samber/ro/plugins/ozzo/ozzo-validation
Validateโ
Validates values with rules.
import (
"github.com/samber/ro"
roozzo "github.com/samber/ro/plugins/ozzo-validation"
"github.com/go-ozzo/ozzo-validation/v4"
)
type User struct {
Name string
Age int
}
obs := ro.Pipe[User, roozzovalidation.Result[User]](
ro.Just(User{Name: "Alice", Age: 30}),
roozzo.Validate[User](
validation.Rule{Name: "name", Required: true},
validation.Rule{Name: "age", Required: true, Min: 18},
),
)
sub := obs.Subscribe(ro.PrintObserver[roozzovalidation.Result[User]]())
defer sub.Unsubscribe()
// Next: {Value: {Name: "Alice", Age: 30}, Error: nil}
// CompletedSimilar:Prototype:func Validate[T any](rules ...ozzo.Rule)ValidateOrSkipโ
Validates observable values and skips invalid ones.
import (
"github.com/samber/ro"
roozzo "github.com/samber/ro/plugins/ozzo-validation"
"github.com/go-ozzo/ozzo-validation/v4"
)
type User struct {
Name string
Age int
}
obs := ro.Pipe[User, User](
ro.Just(
User{Name: "Alice", Age: 30}, // valid
User{Name: "", Age: 15}, // invalid (empty name, too young)
User{Name: "Bob", Age: 25}, // valid
),
roozzo.ValidateOrSkip[User](
validation.Rule{Name: "name", Required: true},
validation.Rule{Name: "age", Required: true, Min: 18},
),
)
sub := obs.Subscribe(ro.PrintObserver[User]())
defer sub.Unsubscribe()
// Next: {Name: "Alice", Age: 30}
// Next: {Name: "Bob", Age: 25}
// Completed (invalid entry skipped)Similar:Prototype:func ValidateOrSkip[T any](rules ...ozzo.Rule)ValidateStructOrSkipโ
Validates struct observables and skips invalid ones.
import (
"github.com/samber/ro"
roozzo "github.com/samber/ro/plugins/ozzo-validation"
"github.com/go-ozzo/ozzo-validation/v4"
)
type User struct {
Name string `validate:"required"`
Age int `validate:"required,min=18"`
}
func (u User) Validate() error {
return validation.ValidateStruct(&u,
validation.Field(&u.Name, validation.Required),
validation.Field(&u.Age, validation.Required, validation.Min(18)),
)
}
obs := ro.Pipe[User, User](
ro.Just(
User{Name: "Alice", Age: 30}, // valid
User{Name: "", Age: 15}, // invalid
User{Name: "Bob", Age: 25}, // valid
),
roozzo.ValidateStructOrSkip[User](),
)
sub := obs.Subscribe(ro.PrintObserver[User]())
defer sub.Unsubscribe()
// Next: {Name: "Alice", Age: 30}
// Next: {Name: "Bob", Age: 25}
// Completed (invalid entry skipped)Similar:Prototype:func ValidateStructOrSkip[T any]()ValidateOrSkipWithContextโ
Validates observable values with context and skips invalid ones.
import (
"context"
"github.com/samber/ro"
roozzo "github.com/samber/ro/plugins/ozzo-validation"
"github.com/go-ozzo/ozzo-validation/v4"
)
type User struct {
Name string
Age int
}
obs := ro.Pipe[User, User](
ro.Just(
User{Name: "Alice", Age: 30}, // valid
User{Name: "", Age: 15}, // invalid
User{Name: "Bob", Age: 25}, // valid
),
roozzo.ValidateOrSkipWithContext[User](
validation.Rule{Name: "name", Required: true},
validation.Rule{Name: "age", Required: true, Min: 18},
),
)
sub := obs.Subscribe(ro.PrintObserver[User]())
defer sub.Unsubscribe()
// Next: {Name: "Alice", Age: 30}
// Next: {Name: "Bob", Age: 25}
// Completed (invalid entry skipped with context support)Prototype:func ValidateOrSkipWithContext[T any](rules ...ozzo.Rule)ValidateWithContextโ
Validates values with rules using context.
import (
"github.com/samber/ro"
roozzo "github.com/samber/ro/plugins/ozzo-validation"
"github.com/go-ozzo/ozzo-validation/v4"
)
type User struct {
Name string
Age int
}
obs := ro.Pipe[User, Result[User]](
ro.Just(User{Name: "Alice", Age: 30}),
roozzo.ValidateWithContext[User](
ozzo.Rule{Name: "name", Required: true},
ozzo.Rule{Name: "age", Required: true, Min: 18},
),
)
sub := obs.Subscribe(ro.PrintObserver[Result[User]]())
defer sub.Unsubscribe()
// Next: {Value: {Name: "Alice", Age: 30}, Error: nil}
// CompletedPrototype:func ValidateWithContext[T any](rules ...ozzo.Rule)ValidateStructOrSkipWithContextโ
Validates struct observables with context and skips invalid ones.
import (
"context"
"github.com/samber/ro"
roozzo "github.com/samber/ro/plugins/ozzo-validation"
"github.com/go-ozzo/ozzo-validation/v4"
)
type User struct {
Name string `validate:"required"`
Age int `validate:"required,min=18"`
}
func (u User) ValidateWithContext(ctx context.Context) error {
return validation.ValidateStructWithContext(ctx, &u,
validation.Field(&u.Name, validation.Required),
validation.Field(&u.Age, validation.Required, validation.Min(18)),
)
}
obs := ro.Pipe[User, User](
ro.Just(
User{Name: "Alice", Age: 30}, // valid
User{Name: "", Age: 15}, // invalid
User{Name: "Bob", Age: 25}, // valid
),
roozzo.ValidateStructOrSkipWithContext[User](),
)
sub := obs.Subscribe(ro.PrintObserver[User]())
defer sub.Unsubscribe()
// Next: {Name: "Alice", Age: 30}
// Next: {Name: "Bob", Age: 25}
// Completed (invalid entry skipped with context support)Prototype:func ValidateStructOrSkipWithContext[T any]()ValidateStructโ
Validates struct values that implement ozzo.Validatable interface.
import (
"github.com/go-ozzo/ozzo-validation/v4"
"github.com/samber/ro"
roozzo "github.com/samber/ro/plugins/ozzo-validation"
)
type User struct {
Name string `validate:"required"`
Age int `validate:"required,min=18"`
}
func (u User) Validate() error {
return ozzo.ValidateStruct(&u,
ozzo.Field(&u.Name, ozzo.Required),
ozzo.Field(&u.Age, ozzo.Required, ozzo.Min(18)),
)
}
obs := ro.Pipe[User, Result[User]](
ro.Just(User{Name: "Alice", Age: 30}),
roozzo.ValidateStruct[User](),
)
sub := obs.Subscribe(ro.PrintObserver[Result[User]]())
defer sub.Unsubscribe()
// Next: {Value: {Name: "Alice", Age: 30}, Error: nil}
// CompletedPrototype:func ValidateStruct[T any]()ValidateStructWithContextโ
Validates struct values that implement ozzo.ValidatableWithContext interface using context.
import (
"context"
"github.com/samber/ro"
roozzo "github.com/samber/ro/plugins/ozzo-validation"
"github.com/go-ozzo/ozzo-validation/v4"
)
type User struct {
Name string `validate:"required"`
Age int `validate:"required,min=18"`
}
func (u User) ValidateWithContext(ctx context.Context) error {
return ozzo.ValidateStructWithContext(ctx, &u,
ozzo.Field(&u.Name, ozzo.Required),
ozzo.Field(&u.Age, ozzo.Required, ozzo.Min(18)),
)
}
obs := ro.Pipe[User, Result[User]](
ro.Just(User{Name: "Alice", Age: 30}),
roozzo.ValidateStructWithContext[User](),
)
sub := obs.Subscribe(ro.PrintObserver[Result[User]]())
defer sub.Unsubscribe()
// Next: {Value: {Name: "Alice", Age: 30}, Error: nil}
// CompletedPrototype:func ValidateStructWithContext[T any]()ValidateOrErrorโ
Validates or emits error.
import (
"fmt"
"github.com/samber/ro"
roozzo "github.com/samber/ro/plugins/ozzo-validation"
"github.com/go-ozzo/ozzo-validation/v4"
)
type User struct {
Name string
Age int
}
obs := ro.Pipe[User, User](
ro.Just(
User{Name: "Alice", Age: 30}, // valid
User{Name: "", Age: 15}, // invalid
),
roozzo.ValidateOrError[User](
ozzo.Rule{Name: "name", Required: true},
ozzo.Rule{Name: "age", Required: true, Min: 18},
),
)
sub := obs.Subscribe(
ro.NewObserver(
func(user User) { fmt.Printf("Valid: %+v\n", user) },
func(err error) { fmt.Printf("Error: %v\n", err) },
func() { fmt.Println("Completed") },
),
)
defer sub.Unsubscribe()
// Valid: {Name:Alice Age:30}
// Error: validation failed
// CompletedSimilar:Prototype:func ValidateOrError[T any](rules ...ozzo.Rule)