github.com/l3x/learn-fp-go@v0.0.0-20171228022418-7639825d0b71/2-design-patterns/ch04-solid/02_maybe/src/maybe/option_error.go (about) 1 package maybe 2 3 import ( 4 "fmt" 5 "errors" 6 ) 7 8 var NilError = errors.New("nil error occurred") 9 10 type ErrorOption interface { 11 Option 12 Err() error 13 } 14 15 type optionalError struct { 16 err error 17 } 18 19 func EmptyError() ErrorOption { 20 return optionalError{err: NilError} 21 } 22 23 func SomeError(err error) ErrorOption { 24 return optionalError{err: err} 25 } 26 27 func (o optionalError) Empty() bool { 28 return o.err == NilError 29 } 30 31 func (o optionalError) Err() error { 32 return o.err 33 } 34 35 func (o optionalError) String() string { 36 if o.err == NilError { 37 return "<EMPTY>" 38 } 39 return fmt.Sprintf("%s", o.err.Error()) 40 }