Skip to main content
Help improve this documentation

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}
    // Completed
    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)
    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)
    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}
    // Completed
    Prototype:
    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}
    // Completed
    Prototype:
    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}
    // Completed
    Prototype:
    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
    // Completed
    Similar:
    Prototype:
    func ValidateOrError[T any](rules ...ozzo.Rule)