gob/option/choice.go

64 lines
1.3 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters

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"
)
// Option permet de définir des valeurs alternative.
type Choice[T1 any, T2 any] struct {
left Option[T1]
right Option[T2]
}
// Left retourne un choix avec la valeur à gauche.
func Left[T1 any, T2 any](v T1) (c Choice[T1, T2]) {
c.left = Some(v)
return
}
// Right retourne un choix avec la valeur à droite.
func Right[T1 any, T2 any](v T2) (c Choice[T1, T2]) {
c.right = Some(v)
return
}
// Left retourne la valeur à gauche, si elle existe.
func (c Choice[T1, T2]) Left() (T1, bool) {
return c.left.Get()
}
// Right retourne la valeur à droite, si elle existe.
func (c Choice[T1, T2]) Right() (T2, bool) {
return c.right.Get()
}
// IsLeft retourne vrai si la valeur à gauche est définie.
func (c Choice[T1, T2]) IsLeft() bool {
return c.left.IsDefined()
}
// IsRight retourne vrai si la valeur à droit est définie.
func (c Choice[T1, T2]) IsRight() bool {
return c.right.IsDefined()
}
// IsNil retourne vrai si aucune valeur nest définie.
func (c Choice[T1, T2]) IsNil() bool {
return !c.IsLeft() && !c.IsRight()
}
func (c Choice[T1, T2]) String() string {
return fmt.Sprintf(`{
left: {
value: %v,
ok: %v,
},
right: {
value: %v,
ok: %v,
},
}`, c.left.v, c.left.ok, c.right.v, c.right.ok)
}