Module Option

This commit is contained in:
Benjamin VAUDOUR 2023-09-23 12:28:10 +02:00
parent df7ab74a5c
commit 6582c6d9cd
2 changed files with 74 additions and 0 deletions

31
option/option.go Normal file
View File

@ -0,0 +1,31 @@
package option
// Option permet de définir des valeurs optionnelles, afin de se passer de nil.
type Option[T any] struct {
v T
ok bool
}
// Some retourne une valeur optionnelle existante.
func Some[T any](v T) (o Option[T]) {
o.v, o.ok = v, true
return
}
// None retourne une option vide.
func None[T any]() (o Option[T]) {
return
}
// Get retourne la valeur de loption et un booléen pour dire si elle est initialisée ou non.
func (o Option[T]) Get() (v T, ok bool) {
if ok = o.ok; ok {
v = o.v
}
return
}
// IsDefined retourne vrai si loption est initialisée.
func (o Option[T]) IsDefined() bool {
return o.ok
}

43
option/result.go Normal file
View File

@ -0,0 +1,43 @@
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 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
}