...

Source file src/github.com/onsi/gomega/internal/polling_signal_error.go

Documentation: github.com/onsi/gomega/internal

     1  package internal
     2  
     3  import (
     4  	"errors"
     5  	"fmt"
     6  	"time"
     7  )
     8  
     9  type PollingSignalErrorType int
    10  
    11  const (
    12  	PollingSignalErrorTypeStopTrying PollingSignalErrorType = iota
    13  	PollingSignalErrorTypeTryAgainAfter
    14  )
    15  
    16  type PollingSignalError interface {
    17  	error
    18  	Wrap(err error) PollingSignalError
    19  	Attach(description string, obj any) PollingSignalError
    20  	Now()
    21  }
    22  
    23  var StopTrying = func(message string) PollingSignalError {
    24  	return &PollingSignalErrorImpl{
    25  		message:                message,
    26  		pollingSignalErrorType: PollingSignalErrorTypeStopTrying,
    27  	}
    28  }
    29  
    30  var TryAgainAfter = func(duration time.Duration) PollingSignalError {
    31  	return &PollingSignalErrorImpl{
    32  		message:                fmt.Sprintf("told to try again after %s", duration),
    33  		duration:               duration,
    34  		pollingSignalErrorType: PollingSignalErrorTypeTryAgainAfter,
    35  	}
    36  }
    37  
    38  type PollingSignalErrorAttachment struct {
    39  	Description string
    40  	Object      any
    41  }
    42  
    43  type PollingSignalErrorImpl struct {
    44  	message                string
    45  	wrappedErr             error
    46  	pollingSignalErrorType PollingSignalErrorType
    47  	duration               time.Duration
    48  	Attachments            []PollingSignalErrorAttachment
    49  }
    50  
    51  func (s *PollingSignalErrorImpl) Wrap(err error) PollingSignalError {
    52  	s.wrappedErr = err
    53  	return s
    54  }
    55  
    56  func (s *PollingSignalErrorImpl) Attach(description string, obj any) PollingSignalError {
    57  	s.Attachments = append(s.Attachments, PollingSignalErrorAttachment{description, obj})
    58  	return s
    59  }
    60  
    61  func (s *PollingSignalErrorImpl) Error() string {
    62  	if s.wrappedErr == nil {
    63  		return s.message
    64  	} else {
    65  		return s.message + ": " + s.wrappedErr.Error()
    66  	}
    67  }
    68  
    69  func (s *PollingSignalErrorImpl) Unwrap() error {
    70  	if s == nil {
    71  		return nil
    72  	}
    73  	return s.wrappedErr
    74  }
    75  
    76  func (s *PollingSignalErrorImpl) Now() {
    77  	panic(s)
    78  }
    79  
    80  func (s *PollingSignalErrorImpl) IsStopTrying() bool {
    81  	return s.pollingSignalErrorType == PollingSignalErrorTypeStopTrying
    82  }
    83  
    84  func (s *PollingSignalErrorImpl) IsTryAgainAfter() bool {
    85  	return s.pollingSignalErrorType == PollingSignalErrorTypeTryAgainAfter
    86  }
    87  
    88  func (s *PollingSignalErrorImpl) TryAgainDuration() time.Duration {
    89  	return s.duration
    90  }
    91  
    92  func AsPollingSignalError(actual interface{}) (*PollingSignalErrorImpl, bool) {
    93  	if actual == nil {
    94  		return nil, false
    95  	}
    96  	if actualErr, ok := actual.(error); ok {
    97  		var target *PollingSignalErrorImpl
    98  		if errors.As(actualErr, &target) {
    99  			return target, true
   100  		} else {
   101  			return nil, false
   102  		}
   103  	}
   104  
   105  	return nil, false
   106  }
   107  

View as plain text