package option // 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 c’est un résultat valide. func (r Result[T]) Ok() (v T, ok bool) { if ok = r.ok; ok { v = r.v } return } // Err retourne l’erreur du résultat, et vrai si c’est 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 }