github.com/keybase/client/go@v0.0.0-20240309051027-028f7c731f8b/chat/storage/errors.go (about)

     1  package storage
     2  
     3  import (
     4  	"context"
     5  	"fmt"
     6  
     7  	"github.com/keybase/client/go/chat/utils"
     8  	"github.com/keybase/client/go/protocol/chat1"
     9  )
    10  
    11  type Error interface {
    12  	error
    13  	ShouldClear() bool
    14  	Message() string
    15  }
    16  
    17  type InternalError struct {
    18  	Msg string
    19  }
    20  
    21  func (e InternalError) ShouldClear() bool {
    22  	return true
    23  }
    24  
    25  func (e InternalError) Error() string {
    26  	return fmt.Sprintf("internal chat storage error: %s", e.Msg)
    27  }
    28  
    29  func (e InternalError) Message() string {
    30  	return e.Msg
    31  }
    32  
    33  func NewInternalError(ctx context.Context, d utils.DebugLabeler, msg string, args ...interface{}) InternalError {
    34  	d.Debug(ctx, "internal chat storage error: "+msg, args...)
    35  	return InternalError{Msg: fmt.Sprintf(msg, args...)}
    36  }
    37  
    38  type MissError struct {
    39  	Msg string
    40  }
    41  
    42  func (e MissError) Error() string {
    43  	if len(e.Msg) > 0 {
    44  		return "chat cache miss: " + e.Msg
    45  	}
    46  	return "chat cache miss"
    47  }
    48  
    49  func (e MissError) ShouldClear() bool {
    50  	return false
    51  }
    52  
    53  func (e MissError) Message() string {
    54  	return e.Error()
    55  }
    56  
    57  type RemoteError struct {
    58  	Msg string
    59  }
    60  
    61  func (e RemoteError) Error() string {
    62  	return fmt.Sprintf("chat remote error: %s", e.Msg)
    63  }
    64  
    65  func (e RemoteError) ShouldClear() bool {
    66  	return false
    67  }
    68  
    69  func (e RemoteError) Message() string {
    70  	return e.Msg
    71  }
    72  
    73  type MiscError struct {
    74  	Msg string
    75  }
    76  
    77  func (e MiscError) Error() string {
    78  	return e.Msg
    79  }
    80  
    81  func (e MiscError) ShouldClear() bool {
    82  	return false
    83  }
    84  
    85  func (e MiscError) Message() string {
    86  	return e.Msg
    87  }
    88  
    89  type VersionMismatchError struct {
    90  	old, new chat1.InboxVers
    91  }
    92  
    93  func NewVersionMismatchError(oldVers chat1.InboxVers, newVers chat1.InboxVers) VersionMismatchError {
    94  	return VersionMismatchError{
    95  		old: oldVers,
    96  		new: newVers,
    97  	}
    98  }
    99  
   100  func (e VersionMismatchError) Error() string {
   101  	return fmt.Sprintf("version mismatch error: old %d new: %d", e.old, e.new)
   102  }
   103  
   104  func (e VersionMismatchError) ShouldClear() bool {
   105  	return false
   106  }
   107  
   108  func (e VersionMismatchError) Message() string {
   109  	return e.Error()
   110  }
   111  
   112  type AbortedError struct{}
   113  
   114  func NewAbortedError() AbortedError {
   115  	return AbortedError{}
   116  }
   117  
   118  func (e AbortedError) Error() string {
   119  	return "request aborted"
   120  }
   121  
   122  func (e AbortedError) ShouldClear() bool {
   123  	return false
   124  }
   125  
   126  func (e AbortedError) Message() string {
   127  	return e.Error()
   128  }
   129  
   130  func isAbortedRequest(ctx context.Context) Error {
   131  	// Check context for aborted request
   132  	select {
   133  	case <-ctx.Done():
   134  		return NewAbortedError()
   135  	default:
   136  	}
   137  	return nil
   138  }