-
Notifications
You must be signed in to change notification settings - Fork 0
/
option_present.go
51 lines (39 loc) · 820 Bytes
/
option_present.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
package fluent
import "fmt"
type present[T any] struct {
value T
}
func (p present[T]) IsPresent() bool {
return true
}
func (p present[T]) Get() T {
return p.value
}
func (p present[T]) Map(mapper func(T) T) Option[T] {
return present[T]{mapper(p.value)}
}
func (p present[T]) OrElse(other T) T {
return p.value
}
func (p present[T]) OrElseGet(supplier func() T) T {
return p.value
}
func (p present[T]) Or(supplier func() Option[T]) Option[T] {
return p
}
func (p present[T]) OrError(e error) Result[T] {
return Ok(p.value)
}
func (p present[T]) IfPresent(fn func(T)) {
fn(p.value)
}
func (p present[T]) Filter(filter func(T) bool) Option[T] {
if filter(p.value) {
return p
} else {
return empty[T]{}
}
}
func (p present[T]) String() string {
return fmt.Sprintf("Present[%+v]", p.value)
}