gob/option/result.go

56 lines
1.0 KiB
Go
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package option
import (
"fmt"
)
// Result stocke un résultat:
// - soit le résultat est valide, et une valeur est stockée,
// - soit le résultat est invalide, et une erreur est stockée.
type Result[T any] struct {
v T
err error
ok bool
}
// Ok retourne un résultat valide.
func Ok[T any](v T) (r Result[T]) {
r.v, r.ok = v, true
return
}
// Err retourne un résultat invalide.
func Err[T any](err error) (r Result[T]) {
r.err = err
return
}
// Ok retourne la valeur du résultat, et vrai si cest un résultat valide.
func (r Result[T]) Ok() (v T, ok bool) {
if ok = r.ok; ok {
v = r.v
}
return
}
// Err retourne lerreur du résultat, et vrai si cest un résultat invalide.
func (r Result[T]) Err() (err error, ok bool) {
if ok = !r.ok; ok {
err = r.err
}
return
}
// IsOk retourne vrai si le résultat est valide.
func (r Result[T]) IsOk() bool {
return r.ok
}
func (r Result[T]) String() string {
return fmt.Sprintf(`{
value: %v,
error: %s,
ok: %v,
}`, r.v, r.err, r.ok)
}