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  }